# #go #docx #file-handling
Вопрос:
Я хочу скопировать все содержимое файла docx (включая его форматирование, такое как жирный шрифт, подчеркивание, маркеры, абзацы и т.д.) И добавить его в другой файл docx.
В этом случае я хочу скопировать содержимое из Source/D1.docx и приложите его к temp.docx
package main
import (
"io/ioutil"
"log"
"os"
)
func main() {
data, err := ioutil.ReadFile("./Source/D1.docx")
if err != nil {
log.Println(err)
}
file, err := os.OpenFile("temp.docx", os.O_APPEND|os.O_WRONLY, 0644)
if err != nil {
log.Println(err)
}
file.Write(data)
}
Комментарии:
1. Тип
docx
файла (как и все сложные типы файлов) имеет свой собственный формат. Добавление одного файла как есть к другому, скорее всего, приведет к недопустимому файлу docx. Вам нужна библиотека, которая считывает и интерпретируетdocx
файл, а также позволяет расширять его.
Ответ №1:
Сделай это:
git clone --depth 1 git://github.com/unidoc/unioffice
New-Item -ItemType Directory unioffice/document/merge
Set-Location unioffice/document/merge
git pull origin pull/448/head
Затем в merge
папке создайте этот файл:
package main
import (
"github.com/unidoc/unioffice/document"
"os"
"path/filepath"
)
func main() {
s := "TestDocument.docx"
doc0, e := document.Open(s)
if e != nil {
panic(e)
}
defer doc0.Close()
doc1, e := document.Open(s)
if e != nil {
panic(e)
}
defer doc1.Close()
doc0.AddParagraph().AddRun().AddPageBreak()
if e := doc0.Append(doc1); e != nil {
panic(e)
}
out := filepath.Join(os.TempDir(), "merged.docx")
doc0.SaveToFile(out)
}
Обратите внимание, что это только для тестирования, для реального кода вы захотите получить лицензию.
Комментарии:
1. Для документов в
docx
формате у меня есть библиотека GO, которая может задавать основные стили. Для этого не требуется никакой лицензии или авторизации. Если предоставляемый в настоящее время контент отвечает вашим потребностям, вы можете рассмотреть возможность его использования. github.com/Luna-CY/go-office2. @Луна, я не думаю, что ты поняла вопрос