Go语言实现基于模板替换内容生成Word文档

 更新时间:2026年03月09日 08:54:08   作者:程序员爱钓鱼  
在自动化办公、批量生成文档、模板填充等场景中,经常需要程序化处理 Word 文件,下面我们就来看看如何使用github.com/nguyenthenguyen/docx库实现基于模板替换内容生成 Word 文档吧

在自动化办公、批量生成文档、模板填充等场景中,经常需要程序化处理 Word 文件。如果你使用 Go 语言开发相关工具,一个非常实用的库是:github.com/nguyenthenguyen/docx

这个库主要用于 基于模板替换内容生成 Word 文档,非常适合自动化生成合同、报告、通知书等文件。

一、docx 库是什么

github.com/nguyenthenguyen/docx 是一个用于处理 Word .docx 模板的 Go 库,作者是 Nguyen The Nguyen。

该库的核心功能是:

基于 Word 模板进行变量替换。

常见用途包括:

  • 自动生成合同
  • 批量生成报告
  • 自动填充表单
  • 批量生成通知书
  • 证书生成系统

它的设计思路类似于:

Word 模板 + 占位符变量 + 程序替换。

二、docx 文件的本质

Word .docx 文件本质上是一个 ZIP 压缩包,内部包含 XML 文件。

主要结构:

docx
 ├── word
 │    ├── document.xml
 │    ├── styles.xml
 │    └── media
 └── _rels

文档正文内容主要存储在:word/document.xml

docx 库通过解析 XML,然后替换占位符实现模板填充。

三、安装库

安装方法:

go get github.com/nguyenthenguyen/docx

导入库:

import "github.com/nguyenthenguyen/docx"

四、创建 Word 模板

首先需要创建一个 Word 模板文件,例如:

template.docx

在 Word 中写入内容:

姓名:{name}
年龄:{age}
公司:{company}

这里的 {name}{age}{company} 就是占位符变量。

五、基本使用示例

下面是一个最基础的模板替换示例。

package main

import (
	"log"

	"github.com/nguyenthenguyen/docx"
)

func main() {

	r, err := docx.ReadDocxFile("template.docx")
	if err != nil {
		log.Fatal(err)
	}
	defer r.Close()

	doc := r.Editable()

	doc.Replace("{name}", "张三", -1)
	doc.Replace("{age}", "28", -1)
	doc.Replace("{company}", "Tech Company", -1)

	err = doc.WriteToFile("output.docx")
	if err != nil {
		log.Fatal(err)
	}
}

执行后就会生成:

output.docx

内容将被替换为:

姓名:张三
年龄:28
公司:Tech Company

六、Replace 参数说明

Replace 方法定义:

Replace(old, new string, n int)

参数说明:

old 需要替换的占位符

new 替换后的内容

n 替换次数

示例:-1

表示替换所有匹配内容。

七、批量生成 Word 文档

在实际应用中,经常需要批量生成文档。

例如批量生成合同。

示例:

users := []map[string]string{
	{"name": "Alice", "age": "30"},
	{"name": "Bob", "age": "25"},
}

for _, u := range users {

	r, _ := docx.ReadDocxFile("template.docx")
	doc := r.Editable()

	doc.Replace("{name}", u["name"], -1)
	doc.Replace("{age}", u["age"], -1)

	doc.WriteToFile(u["name"] + ".docx")

	r.Close()
}

执行后会生成:

Alice.docx
Bob.docx

八、模板设计建议

为了保证替换稳定,模板设计时需要注意:

  • 占位符不要跨段落
  • 占位符不要被 Word 自动拆分
  • 建议使用简单格式

推荐占位符格式:

{name}
{date}
{price}

不推荐复杂结构。

九、常见问题

1.占位符替换失败

原因通常是 Word 自动拆分文本节点。

例如:{name}

可能被拆成多个 XML 节点。

解决方法:

重新输入占位符,确保在同一文本块中。

2.模板格式复杂

如果模板中包含:

  • 表格
  • 图片
  • 复杂样式

有时会影响替换。

建议模板尽量保持结构简单。

3.不支持 .doc

该库只支持:.docx

旧版 Word .doc 不支持。

十、典型应用场景

docx 库适用于以下系统:

合同自动生成系统 企业报告生成 证书生成平台 通知书批量生成 发票或表单自动填充

例如:

输入用户数据

姓名
身份证
公司
职位

系统自动生成 Word 文档。

十一、与其他方案对比

方案特点
docx简单模板替换
unioffice功能强但较复杂
COM 自动化需要安装 Word
Python-docxPython 方案

如果只需要 模板替换生成文档,docx 是非常轻量的选择。

十二、总结

github.com/nguyenthenguyen/docx 是一个简单高效的 Word 模板处理库。

主要特点:

  • 使用 Word 模板
  • 占位符替换
  • API 简单
  • 适合批量文档生成

对于需要自动生成 Word 文件的 Go 项目来说,这个库可以大幅简化开发流程。

通过结合数据库和模板系统,可以快速构建:自动化文档生成平台。

到此这篇关于Go语言实现基于模板替换内容生成Word文档的文章就介绍到这了,更多相关Go生成Word文档内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Go 简单实现多租户数据库隔离

    Go 简单实现多租户数据库隔离

    本文主要介绍了Go 简单实现多租户数据库隔离,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-05-05
  • 浅谈Go语言高并发处理思路

    浅谈Go语言高并发处理思路

    本文主要介绍了Go语言高并发处理思路,通过使用goroutine和channel,可以实现高效的异步处理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-11-11
  • golang并发编程使用Select语句的实现

    golang并发编程使用Select语句的实现

    Go语言中的select语句是并发编程中的重要工具,允许Goroutine等待多个通道操作,它阻塞直至任一case可执行,可用于接收数据、实现超时机制和非阻塞通道操作,感兴趣的可以了解一下
    2024-10-10
  • Golang连接池的几种实现案例小结

    Golang连接池的几种实现案例小结

    这篇文章主要介绍了Golang连接池的几种实现案例小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • golang抓取tcp包的实现方式

    golang抓取tcp包的实现方式

    使用`golang`的`packet`和`pcap`库可以抓取TCP数据包,首先,确保安装了`pcap`库,然后使用以下代码打开网络接口,设置过滤规则为“tcp”,开始捕获并解析TCP数据包,运行代码时需要管理员权限
    2024-12-12
  • golang fmt格式“占位符”的实例用法详解

    golang fmt格式“占位符”的实例用法详解

    在本篇文章里小编给大家整理的是一篇关于golang fmt格式“占位符”的实例用法详解内容,有兴趣的朋友们可以学习下。
    2021-07-07
  • Golang上下文Context的常见应用场景

    Golang上下文Context的常见应用场景

    Golang context主要用于定义超时取消,取消后续操作,在不同操作中传递值。本文通过简单易懂的示例进行说明,感兴趣的可以了解一下
    2023-04-04
  • 详解golang中make与new的异同点和用法

    详解golang中make与new的异同点和用法

    这篇文章将给大家介绍了go语言中函数new与make的使用和区别,关于go语言中new和make是内建的两个函数,主要用来创建分配类型内存,文中通过代码示例介绍的非常详细,具有一定的参考价值,需要的朋友可以参考下
    2024-01-01
  • C语言的10大基础算法

    C语言的10大基础算法

    算法是一个程序和软件的灵魂,作为一名优秀的程序员,只有对一些基础的算法有着全面的掌握,才会在设计程序和编写代码的过程中显得得心应手。这篇文章主要介绍了C语言的10大基础算法,需要的朋友可以参考下
    2019-09-09
  • golang中beego入门

    golang中beego入门

    Beego是一个基于Go语言的开源框架,用于构建Web应用程序和API,本文主要介绍了golang中beego入门,具有一定的参考价值,感兴趣的可以了解一下
    2023-12-12

最新评论