The Go Programming Language
› http://golang.org/
› Go Playground
Go Projects
› Revel Web Framework
clow

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

  •  
  •   clow · Jun 3, 2025 · 6500 views
    This topic created in 519 days ago, the information mentioned may be changed or developed.

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

    为什么又造轮子?

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

    • 纯 Go 实现,无外部依赖
    • 支持复杂的表格操作
    • 能处理样式和格式
    • 性能要好,适合批量生成

    主要特性

    基础功能

    • 创建/读取/修改 .docx 文档
    • 文本格式化(字体、颜色、粗体等)
    • 18 种预定义样式,支持 Word 导航窗格
    • 段落对齐、间距、缩进

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

    // 创建表格很简单
    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}}`
    

    高级功能

    • 页眉页脚、目录生成
    • 脚注尾注、列表编号
    • 页面设置( A4 、Letter 等)
    • 图片插入

    性能表现

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

    • Go (WordZero): 2.62ms
    • JavaScript: 9.63ms
    • Python: 55.98ms

    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 。

    适用场景

    • 报表生成系统
    • 合同文档批量生成
    • 数据导出为 Word 格式
    • 文档模板填充
    • 自动化办公

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


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

    41 replies  •  2025-12-18 12:16:51 +08:00
    WaldenHorizon
    WaldenHorizon
    Jun 3, 2025
    1
    go 确实没有好用的开源 word 操作库,之前是 kotlin 接 apache 那套然后用 cgo 调用 jar 曲线救国的,star 支持一下
    jazzychai
    jazzychai
    Jun 3, 2025
    2
    star 了,刚好要做一个 word 相关的功能,本来想用 Python 曲线救国,试一下能不能满足业务需求
    sholmesian
    sholmesian
    Jun 3, 2025 via iPhone
    3
    这个正需要,已 start.
    icinessz
    icinessz
    Jun 3, 2025
    4
    太感谢了,一直在找类似的库
    suntoryliqu
    suntoryliqu
    Jun 3, 2025
    5
    大佬牛逼!
    body007
    body007
    Jun 3, 2025
    6
    为大佬点赞。
    bronyakaka
    bronyakaka
    Jun 3, 2025
    7
    很不错,很实用
    moell
    moell
    Jun 3, 2025
    8
    已 star
    676529483
    676529483
    Jun 3, 2025❤️2
    9
    支持下,以前有个项目要用 xls ,go 只支持 xlsx ,最后只能 Python 曲线救国了
    caotian
    caotian
    Jun 3, 2025
    10
    已 start, 有没有图表支持? 如果有的话, 就可以换掉 poi-tl 那套了, 那个库报了 Vulnerability 一直不更新修复, 快不敢用了.
    dbskcnc
    dbskcnc
    Jun 3, 2025
    11
    虽然基本不用 word,不过还是支持
    shengxiadiaoling
    shengxiadiaoling
    Jun 3, 2025
    12
    牛
    vfs
    vfs
    Jun 3, 2025
    13
    目前还没有需求,但是很赞
    Reficul
    Reficul
    Jun 3, 2025❤️1
    14
    @wangritian

    你这个转接的有点 6 啊。 kotlin -> jvm -> cgo -> go
    clow
    clow
    OP
    Jun 3, 2025
    15
    @caotian 多谢支持,图表还没实现,加到 todo 里了
    clow
    clow
    OP
    Jun 3, 2025
    16
    @dbskcnc 多谢支持~
    lexno
    lexno
    Jun 3, 2025
    17
    支不支持已有的 word 模板,然后使用这个模板来生成数据,我看现有的示例好像都是用库本身产生一个 document ,然后再进行模板填充?
    clow
    clow
    OP
    Jun 3, 2025
    18
    @lexno 支持的,使用 LoadTemplateFromDocument 加载模板文件即可
    keepfun
    keepfun
    Jun 3, 2025
    20
    厉害了
    HENQIGUAI
    HENQIGUAI
    Jun 3, 2025
    21
    虽然暂时用不到但还是点个赞
    clow
    clow
    OP
    Jun 3, 2025 via Android
    22
    @HENQIGUAI 感谢大佬,再接再厉🤓🤓
    wogogoing
    wogogoing
    Jun 3, 2025
    23
    大佬可以的,感谢开源。已 star (github)。
    ace12
    ace12
    Jun 3, 2025
    24
    https://github.com/bobiverse/docxplate
    抄袭一下这里面的一些功能呢
    WaldenHorizon
    WaldenHorizon
    Jun 3, 2025
    25
    @Reficul 真正的胶水语言:C
    FightPig
    FightPig
    Jun 3, 2025
    26
    这个不错
    wzw
    wzw
    Jun 3, 2025 via iPhone
    27
    强烈支持一下,目前在用 python docx ,性能很差
    andyzhshg
    andyzhshg
    Jun 4, 2025
    28
    特别需要一个输出 PDF 的功能,不过我调研一圈下来,貌似只有 C#调用微软官方的库靠谱一些,还要求是安装了 office 才能用。

    其他语言的要么是收费的,要么是要求安装 LibreOffice ,输出的格式也不太保真。
    crackidz
    crackidz
    Jun 4, 2025
    29
    赞👍这个之前会用到
    clow
    clow
    OP
    Jun 4, 2025 via Android
    30
    @andyzhshg 安排到待办,大佬可以提个 issue 记录下
    clow
    clow
    OP
    Jun 4, 2025 via Android
    31
    @wzw 感谢支持~ py 生态确实好,但也确定确实不适合生产🤣
    wzw
    wzw
    Jun 4, 2025 via iPhone
    32
    @clow #30 下周就安排试试,可以的话用起来。 期待 pdf 和刷新目录的功能
    clow
    clow
    OP
    Jun 4, 2025
    34
    @jazzychai 大佬回复好勤快,感谢帮忙找到一堆小问题~
    jazzychai
    jazzychai
    Jun 4, 2025
    35
    @clow 你修的也超快,这个项目以后就是 go 的 word 操作第一库,哈哈
    playniuniu
    playniuniu
    Jun 5, 2025
    36
    感谢大佬,非常有用,已 Star
    wkla
    wkla
    Jun 6, 2025
    37
    这个牛逼啊。我比较好奇,不同的编辑器会乱码吗? docx 的格式是怎么分析的?
    clow
    clow
    OP
    Jun 7, 2025 via Android
    38
    @wkla 不同编辑器啥意思。Word 本质其实就是 xml ,只要符合 ooxml 规范就可以
    wkla
    wkla
    Jun 7, 2025
    39
    @clow #38 比如 wps 和 word 之间的兼容性,word 写的到 wps 格式乱了。原来是有规范的啊
    AAAmos
    AAAmos
    Oct 29, 2025
    40
    厉害厉害👍👍👍
    Marathonk
    Marathonk
    Dec 18, 2025
    41
    大佬牛逼!!支持
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1444 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 65ms · UTC 19:48 · PVG 03:48 · LAX 11:48 · JFK 14:48
    ♥ Do have faith in what you're doing.