使用Golang在Word文档中插入对象的方法

使用Golang在Word文档中插入对象的方法 我希望将嵌入对象(另一个.docx文件)插入到.docx文件中。是否有支持此功能的包?

9 回复

我不确定是否有明确的连接函数,但我认为你可以读取一个文档的内容并将其插入到另一个文档的末尾。

更多关于使用Golang在Word文档中插入对象的方法的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


@geosoft1, 抱歉回复晚了。我尝试了 unidoc/unioffice 中的所有文档示例,但未能找到我需要的方法。

@catacombs, 不是将"文本"从一个文件复制到另一个文件。这个用例是将一个.docx文件(作为对象)复制到另一个.docx文件的文本中。

@catacombs,感谢您的回复!

是的,我经理的要求是将一个docx文件插入到另一个docx文件中。由于我们之前是手动完成这个操作的,现在希望能够自动化同样的流程。您有什么建议吗?

这完全是另一回事。

.docx 中的嵌入对象更像是其名称所表达的含义——一个完全嵌入的对象。可以把它想象成 HTML 中的图像,该图像以内联方式提供 base64 编码数据,而不是通过常规的 HTTP URL 来下载图像。

文档(docx)[Word]

  • 读取/写入/编辑
  • 编辑现有文档 打开现有文档并替换/删除文本,同时不修改格式。

这与"cp file1.txt file2.txt"不同。

实际上,我使用的是Windows系统。

  • 右键点击word1.docx并选择"复制"
  • 双击打开word2.docx
  • 将光标放在word2.docx的文本中,然后右键点击并选择粘贴

这样word1.docx就会作为一个对象插入到word2.docx中。

如下图所示:

image

我虽然没有亲自尝试过,但第一眼就发现网上有一些资源,比如这个:

GitHub图标 GitHub

头像

unidoc/unioffice

用于创建和处理Office Word (.docx)、Excel (.xlsx) 和 Powerpoint (.pptx) 文档的纯Go语言库 - unidoc/unioffice

是的,可以使用 unidoc/unioffice 包在 Golang 中向 Word 文档(.docx)插入嵌入对象。该包支持创建和修改 Office 文档,包括嵌入其他文件作为对象。

以下是一个示例代码,展示如何创建一个新的 Word 文档并嵌入另一个 .docx 文件作为对象:

package main

import (
    "log"
    "os"

    "github.com/unidoc/unioffice/document"
    "github.com/unidoc/unioffice/measurement"
    "github.com/unidoc/unioffice/schema/soo/ofc/sharedTypes"
    "github.com/unidoc/unioffice/schema/soo/wml"
)

func main() {
    // 创建一个新的 Word 文档
    doc := document.New()

    // 添加一个段落
    para := doc.AddParagraph()

    // 创建一个嵌入对象
    embeddedFile, err := doc.AddEmbeddedFile("embedded.docx", "application/vnd.openxmlformats-officedocument.wordprocessingml.document")
    if err != nil {
        log.Fatalf("无法添加嵌入文件: %v", err)
    }

    // 创建一个 OLE 对象来引用嵌入的文件
    oleObj := wml.NewCT_OleObject()
    oleObj.TypeAttr = sharedTypes.ST_OleObjectTypeEmbedded
    oleObj.DvAspectAttr = wml.ST_DvAspectContent
    oleObj.IdAttr = &embeddedFile.RelID()

    // 创建一个绘图对象来包含 OLE 对象
    drawing := wml.NewEG_BlockLevelElts()
    inline := wml.NewCT_Inline()
    inline.Extent.CxAttr = measurement.Inch(2).ToEMU() // 设置对象宽度
    inline.Extent.CyAttr = measurement.Inch(1).ToEMU() // 设置对象高度
    inline.DocPr = &wml.CT_NonVisualDrawingProps{
        IdAttr:   1,
        NameAttr: "Embedded Document",
    }
    graphic := wml.NewCT_GraphicalObject()
    graphic.GraphicData.UriAttr = "http://schemas.openxmlformats.org/presentationml/2006/ole"
    graphic.GraphicData.Any = []*wml.Any{&wml.Any{
        OleObject: oleObj,
    }}
    inline.Graphic = graphic
    drawing.Inline = append(drawing.Inline, inline)

    // 将绘图对象添加到段落中
    para.X().EG_BlockLevelElts = append(para.X().EG_BlockLevelElts, drawing)

    // 保存文档
    err = doc.SaveToFile("output.docx")
    if err != nil {
        log.Fatalf("无法保存文档: %v", err)
    }

    log.Println("文档已成功创建并嵌入对象")
}

在这个示例中:

  1. 使用 document.New() 创建一个新的 Word 文档。
  2. 通过 doc.AddEmbeddedFile() 添加要嵌入的 .docx 文件,并指定 MIME 类型。
  3. 创建一个 OLE 对象(CT_OleObject)来引用嵌入的文件,设置其类型为嵌入。
  4. 使用绘图对象(CT_InlineCT_GraphicalObject)来定义嵌入对象在文档中的显示。
  5. 将绘图对象添加到段落中,并保存文档。

确保在运行前安装 unidoc/unioffice 包:

go get github.com/unidoc/unioffice

此代码会生成一个名为 “output.docx” 的文件,其中包含嵌入的 “embedded.docx” 对象。嵌入的对象将显示为图标或内容,具体取决于 Word 应用程序的设置。

回到顶部