Заполнение полей формы в docx с помощью библиотеки golang unioffice - PullRequest
2 голосов
/ 06 июля 2019

Я пытаюсь заполнить поля формы с помощью библиотеки unioffice.Документ, с которым я работаю, содержит несколько параграфов.Абзац содержит несколько полей формы.Я хочу заполнить все поля формы в документе.И вот код, который я запускаю:

    doc, err := document.Open("form.docx")
    if err != nil {
        log.Fatalf("error opening form: %s", err)
    }

    for i := range doc.FormFields() {
        doc.FormFields()[i].SetValue("test")
    }

    doc.SaveToFile("filled-form.docx")

Однако не все поля формы были заполнены.

1 Ответ

0 голосов
/ 07 июля 2019

Похоже на ошибку в func (d *Document) Save(w io.Writer) error{}. Я могу читать и писать в каждое из FormFields, но только последнее значение FormField в абзаце фактически сохраняется в файл.

Ниже код работает, как ожидалось, пока вы не сохраните в файл. (Это означает, что он печатает ранее установленное значение). Я видел, что вы уже открыли новый выпуск на github ( ссылка ), надеюсь, вам повезет больше.

package main

import (
    "github.com/unidoc/unioffice/document"
    "io/ioutil"
    "log"
    "os"
)

func main() {
    _, err := ioutil.ReadFile("filled-form.docx")
    if err == nil {
        err = os.Remove("filled-form.docx")
        if err != nil {
            log.Fatal(err)
        }
    }

    doc, err := document.Open("form.docx")
    if err != nil {
        log.Fatalf("error opening form: %s", err)
    }

    for _, f := range doc.FormFields() {
        if f.Type() == document.FormFieldType(1) {
            f.SetValue("test")
        }
    }

    for _, f := range doc.FormFields() {
        log.Println("-------------------")
        log.Println(f.Name())
        log.Println(f.Value())
    }

    err = doc.SaveToFile("filled-form.docx")
    if err != nil {
        log.Fatal(err)
    }
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...