登录
首页 >  Golang >  Go问答

使用golang库unioffice填写docx中的表单字段

来源:stackoverflow

时间:2024-04-21 22:51:32 406浏览 收藏

来到golang学习网的大家,相信都是编程学习爱好者,希望在这里学习Golang相关编程知识。下面本篇文章就来带大家聊聊《使用golang库unioffice填写docx中的表单字段》,介绍一下,希望对大家的知识积累有所帮助,助力实战开发!

问题内容

我正在尝试使用 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")

但是,并非所有表单字段都已填写。


解决方案


在我看来,这就像 func (d *document) save(w io.writer) 错误{} 中的错误。我可以读取和写入每个 formfields,但只有段落中的最后一个 formfield 值实际保存到文件中。

在保存到文件之前,下面的代码将按预期工作。 (这意味着它打印出先前设置的值)。我看到你已经在 github 上打开了一个新问题(link),希望你能有更多的运气。

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

今天带大家了解了的相关知识,希望对你有所帮助;关于Golang的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>