使用Golang在Word文档中插入对象的方法
使用Golang在Word文档中插入对象的方法 我希望将嵌入对象(另一个.docx文件)插入到.docx文件中。是否有支持此功能的包?
我不确定是否有明确的连接函数,但我认为你可以读取一个文档的内容并将其插入到另一个文档的末尾。
更多关于使用Golang在Word文档中插入对象的方法的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
@geosoft1, 抱歉回复晚了。我尝试了 unidoc/unioffice 中的所有文档示例,但未能找到我需要的方法。
@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中。
如下图所示:

我虽然没有亲自尝试过,但第一眼就发现网上有一些资源,比如这个:
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("文档已成功创建并嵌入对象")
}
在这个示例中:
- 使用
document.New()创建一个新的 Word 文档。 - 通过
doc.AddEmbeddedFile()添加要嵌入的 .docx 文件,并指定 MIME 类型。 - 创建一个 OLE 对象(
CT_OleObject)来引用嵌入的文件,设置其类型为嵌入。 - 使用绘图对象(
CT_Inline和CT_GraphicalObject)来定义嵌入对象在文档中的显示。 - 将绘图对象添加到段落中,并保存文档。
确保在运行前安装 unidoc/unioffice 包:
go get github.com/unidoc/unioffice
此代码会生成一个名为 “output.docx” 的文件,其中包含嵌入的 “embedded.docx” 对象。嵌入的对象将显示为图标或内容,具体取决于 Word 应用程序的设置。


