Как добавить файл docx в Golang

# #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)
}
 

Обратите внимание, что это только для тестирования, для реального кода вы захотите получить лицензию.

https://github.com/unidoc/unioffice

Комментарии:

1. Для документов в docx формате у меня есть библиотека GO, которая может задавать основные стили. Для этого не требуется никакой лицензии или авторизации. Если предоставляемый в настоящее время контент отвечает вашим потребностям, вы можете рассмотреть возможность его использования. github.com/Luna-CY/go-office

2. @Луна, я не думаю, что ты поняла вопрос