分享一个纯 Go 实现的 Word 文档操作库 - WordZero

90 天前
 clow

最近在做一个项目需要生成 Word 报告,试了几个库都不太满意,要么功能太简单,要么需要付费不完全开源。索性自己撸了一个,现在分享给大家。

为什么又造轮子?

市面上的 Go Word 库要么只能做简单的文本插入,要么需要安装 Office 或者 LibreOffice 。我需要的是:

主要特性

基础功能

表格功能(这个比较实用)

// 创建表格很简单
table := doc.AddTable(&document.TableConfig{
    Rows: 3, Columns: 4,
})

// 设置内容和样式
table.SetCellText(0, 0, "姓名")
table.MergeCells(0, 0, 0, 1) // 合并单元格

// 还有迭代器,方便批量处理
table.ForEach(func(info *document.CellInfo) {
    if info.Row == 0 {
        info.Cell.SetBackgroundColor("E6F3FF")
    }
})

模板功能

支持模板继承,可以定义基础模板然后扩展:

baseTemplate := `{{companyName}} 报告
{{#block "content"}}默认内容{{/block}}`

salesTemplate := `{{extends "base"}}
{{#block "content"}}
销售额:{{sales}}
新客户:{{customers}}
{{/block}}`

高级功能

性能表现

做了个简单的基准测试,生成同样的文档:

Go 确实快不少。

使用体验

API 设计比较直观,支持链式调用:

doc := document.New()

doc.AddParagraph("标题").
    SetStyle(style.StyleHeading1).
    SetAlignment(document.AlignmentCenter)

doc.AddParagraph("正文内容").
    SetFontFamily("微软雅黑").
    SetFontSize(12).
    SetColor("333333")

doc.Save("report.docx")

项目地址

GitHub: https://github.com/ZeroHawkeye/wordZero

Gitee: https://gitee.com/Zmata_admin/WordZero

有详细的文档和示例,examples 目录下有各种使用场景的 demo 。

适用场景

目前还在持续更新中,如果有需求或者 bug 欢迎提 issue 。


纯 Go 实现,零依赖,开箱即用。如果对你有帮助记得给个 star ⭐

4432 次点击
所在节点    Go 编程语言
39 条回复
wangritian
90 天前
go 确实没有好用的开源 word 操作库,之前是 kotlin 接 apache 那套然后用 cgo 调用 jar 曲线救国的,star 支持一下
jazzychai
90 天前
star 了,刚好要做一个 word 相关的功能,本来想用 Python 曲线救国,试一下能不能满足业务需求
sholmesian
90 天前
这个正需要,已 start.
icinessz
90 天前
太感谢了,一直在找类似的库
tuimaochang
90 天前
大佬牛逼!
body007
90 天前
为大佬点赞。
bronyakaka
90 天前
很不错,很实用
moell
90 天前
已 star
676529483
90 天前
支持下,以前有个项目要用 xls ,go 只支持 xlsx ,最后只能 Python 曲线救国了
caotian
90 天前
已 start, 有没有图表支持? 如果有的话, 就可以换掉 poi-tl 那套了, 那个库报了 Vulnerability 一直不更新修复, 快不敢用了.
dbskcnc
90 天前
虽然基本不用 word,不过还是支持
shengxiadiaoling
90 天前
vfs
90 天前
目前还没有需求,但是很赞
Reficul
90 天前
@wangritian

你这个转接的有点 6 啊。 kotlin -> jvm -> cgo -> go
clow
90 天前
@caotian 多谢支持,图表还没实现,加到 todo 里了
clow
90 天前
@dbskcnc 多谢支持~
lexno
90 天前
支不支持已有的 word 模板,然后使用这个模板来生成数据,我看现有的示例好像都是用库本身产生一个 document ,然后再进行模板填充?
clow
90 天前
@lexno 支持的,使用 LoadTemplateFromDocument 加载模板文件即可
clow
90 天前
fenglangjuxu
90 天前
厉害了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1135912

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX