V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
luxurioust
V2EX  ›  Go 编程语言

Go 语言 Excel 文档类库 excelize 发布 1.4.1 版本

  •  
  •   luxurioust ·
    xuri · 2019-01-04 10:58:19 +08:00 · 3941 次点击
    这是一个创建于 2142 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Excelize

    Excelize 是 Go 语言编写的一个用来操作 Office Excel 文档类库,基于 ECMA-376 OOXML Spec。可以使用它来读取、写入 XLSX 文件,相比较其他的开源类库,Excelize 支持操作带有数据透视表、切片器、图表与图片的 Excel 并支持向 Excel 中插入图片与创建简单图表,可应用于各种报表系统中。

    GitHub: github.com/360EntSecGroup-Skylar/excelize

    2019 年 1 月 3 日 社区发布了 1.4.1 版本,该版本包含了很多新功能和错误修复。完整的更改列表可查看 change log.

    此版本中最显著的变化包括:

    新增功能

    • 新增 WriteTo() 方法, 该函数通过实现 io.WriterTo 接口支持文件写入
    • 新增 SearchSheet() 方法,支持通过给定工作表名称、单元格的值或者正则表达式来搜索指定工作表,相关 issue #277
    • 新增 ProtectSheet()UnprotectSheet() 方法,支持设置保护和取消保护工作表,以防止其他用户意外或故意更改,移动或删除工作表中的数据,相关 issue #273
    • 新增 GetMergeCells() 方法,支持通过给定的工作表名称获取当前工作表中全部合并单元格的坐标与值
    • 支持对页面轮廓线属性设置的支持,相关 issue #304
    • 新增 go module 支持
    • 支持设置与获取工作表的 TopLeftCell 属性,相关 issue #310
    • 图表创建函数 AddChart() 新增支持创建 二维面积图、二维堆积面积图、二维百分比堆积面积图、三维面积图、三维堆积面积图和三维百分比堆积面积图,相关 issue #311

    问题修复

    • 修复内部函数 sharedStringsReader() 因缺少传统与严格模式 XML 命名空间地址转换导致的问题,解决相关 issue #276
    • 修复图表格式设置 JSON 参数结构体 tag 定义的问题
    • 修复部分情况下获取单元格公式时出现空指针异常问题,解决了相关 issue #290
    • 通过 GetRows() 获取指定工作表中全部单元格,该函数的返回值将忽略工作表尾部空白行,解决了相关 issue #195
    • 修复部分情况下 GetSheetMap() 返回工作表索引与名称异常问题,解决了相关 issue #297
    • 修复部分情况下通过索引删除工作表出现的异常问题,解决了相关 issue #308

    其他

    • 对单元测试进行了重构,相关 issue #322
    • 使用为 excelize 设计的新 Logo, 大量的文档更新
    20 条回复    2019-03-15 09:32:15 +08:00
    myyou
        1
    myyou  
       2019-01-04 11:09:59 +08:00
    不错,现在的 Python 项目也用到了这个库
    iamecho
        2
    iamecho  
       2019-01-04 11:10:52 +08:00
    专业,顶
    yepinf
        3
    yepinf  
       2019-01-04 11:11:50 +08:00
    赞, 已 star
    bellucci1964
        4
    bellucci1964  
       2019-01-04 12:43:00 +08:00
    借楼问一下 go 操作 word 有没有好用的库
    luxurioust
        5
    luxurioust  
    OP
       2019-01-04 13:05:22 +08:00
    scnace
        6
    scnace  
       2019-01-04 13:11:18 +08:00 via Android
    @bellucci1964 我刚写 Go 的时候 写了一个 github.com/scbizu/report
    CCCCiiii
        7
    CCCCiiii  
       2019-01-04 13:38:55 +08:00
    小哥哥,公司招聘高级 golang,方便加个微信聊聊么
    jjx
        8
    jjx  
       2019-01-04 16:27:51 +08:00
    不错, 现在就缺个类似 xhtml2pdf 一样的库了
    reus
        9
    reus  
       2019-01-04 16:48:04 +08:00
    只用 gooxml
    hellos
        10
    hellos  
       2019-01-04 16:48:55 +08:00 via Android
    @CCCCiiii 哇,挖 360 的墙角
    leon0903
        11
    leon0903  
       2019-01-04 16:59:02 +08:00
    这个挺好的,我们目前后端生成 excel 就是用的这个,为了方便生成通用的 excel,我还在这上面通过自定义 go 的 tag 写了一个简单的通用生成 excel 的函数。
    kylix
        12
    kylix  
       2019-01-04 19:28:12 +08:00
    收藏备用
    xupefei
        13
    xupefei  
       2019-01-04 19:33:27 +08:00
    提醒一下 LZ,用 Excel 的 logo 你确定不侵权吗?
    ybilly
        14
    ybilly  
       2019-01-15 20:46:24 +08:00
    最近刚使用这个库做了个通用的库

    https://github.com/billyplus/luatable

    以前我用过一个 golang 的库,是 tealeg 的,后来看到他在项目说明里面推荐 360 的库,说 360 的库功能更全面,所以这次我先尝试了一下 360 的库。结果不是很理想,读取数据明显比 tealeg 的慢,应该是 xml 解析没有优化,但是对于我的这种导表工具来说,读取速度比功能更有意义。

    我用这两个库做了个对比。

    总运行时间:4.97s
    其中:
    github.com/360EntSecGroup-Skylar/excelize.(*File).GetRows (67.00%, 3.33s)

    ```
    Flat Flat% Sum% Cum Cum% Name Inlined?
    0 0.00% 0.00% 3.49s 70.22% github.com/spf13/cobra.(*Command).Execute
    0 0.00% 0.00% 3.49s 70.22% github.com/spf13/cobra.(*Command).ExecuteC
    0 0.00% 0.00% 3.49s 70.22% main.main
    0 0.00% 0.00% 3.49s 70.22% runtime.main
    0 0.00% 0.00% 3.48s 70.02% github.com/spf13/cobra.(*Command).execute
    0 0.00% 0.00% 3.48s 70.02% main.(*generator).GenConfig
    0 0.00% 0.00% 3.48s 70.02% main.(*generator).GenConfig.func1
    0 0.00% 0.00% 3.48s 70.02% main.(*generator).GenConfig.func1.1
    0 0.00% 0.00% 3.48s 70.02% main.glob..func1
    0 0.00% 0.00% 3.48s 70.02% path/filepath.Walk
    0 0.00% 0.00% 3.48s 70.02% path/filepath.walk
    0 0.00% 0.00% 3.46s 69.62% main.(*generator).iterateXlsx
    0 0.00% 0.00% 3.46s 69.62% main.(*generator).sheetsFromExcel360
    0 0.00% 0.00% 3.33s 67.00% github.com/360EntSecGroup-Skylar/excelize.(*File).GetRows
    0 0.00% 0.00% 2.70s 54.33% encoding/xml.(*Decoder).DecodeElement
    0.18s 3.62% 3.62% 2.70s 54.33% encoding/xml.(*Decoder).unmarshal
    ```

    后来试着换了一个库,这个库功能更少,但是使用时候发现读表效率更高,换库只是调整了读表的部分。
    github.com/tealeg/xlsx

    总运行时间:2.34s
    top
    ```
    Flat Flat% Sum% Cum Cum% Name Inlined?
    0 0.00% 0.00% 1.30s 55.56% github.com/tealeg/xlsx.readSheetFromFile
    0 0.00% 0.00% 1.30s 55.56% github.com/tealeg/xlsx.readSheetsFromZipFile.func1
    0 0.00% 0.00% 1.27s 54.27% encoding/xml.(*Decoder).Decode
    0 0.00% 0.00% 1.27s 54.27% encoding/xml.(*Decoder).DecodeElement
    0.04s 1.71% 1.71% 1.27s 54.27% encoding/xml.(*Decoder).unmarshal
    0.03s 1.28% 2.99% 1.14s 48.72% encoding/xml.(*Decoder).unmarshalPath
    0 0.00% 2.99% 1.13s 48.29% github.com/tealeg/xlsx.getWorksheetFromSheet
    0.01s 0.43% 3.42% 0.76s 32.48% encoding/xml.(*Decoder).Token
    0.04s 1.71% 5.13% 0.69s 29.49% encoding/xml.(*Decoder).rawToken
    0 0.00% 5.13% 0.42s 17.95% runtime.mstart
    0 0.00% 5.13% 0.42s 17.95% runtime.systemstack
    ```

    两者对比,读取文件的操作差别还是挺大的,如果文件更大的话,差距就会更明显。
    luxurioust
        15
    luxurioust  
    OP
       2019-01-16 00:04:19 +08:00
    luxurioust
        16
    luxurioust  
    OP
       2019-01-16 00:13:56 +08:00
    @ybilly Excelize 设计之初是以兼容性优先考虑来设计的,为了兼容带有相对复杂样式的 xlsx 文档做了很多内部检查,这会在一定程度上影响性能表现。对于操作工作簿内容为纯文本的场景,目前 tealeg/xlsx 表现更好。Excelize 后续会在性能方面不断做优化,同时也欢迎大家参与类库的开发、提交 patch ~
    ybilly
        17
    ybilly  
       2019-01-16 11:19:22 +08:00
    @luxurioust 360 是个好库,曾经 golang 上只有 tealeg 的库,但是他的库对于读取文本以外的功能支持不多。现在多了 360,是个好事。最终可以根据项目需求来选择。
    zarte
        18
    zarte  
       2019-03-08 15:43:02 +08:00
    怎么修改图表样式呀?
    luxurioust
        19
    luxurioust  
    OP
       2019-03-14 19:26:53 +08:00
    @zarte 暂时还不支持对图表样式的修改
    zarte
        20
    zarte  
       2019-03-15 09:32:15 +08:00
    @luxurioust 啊!有没有图表样式定义格式相关文档的连接呀?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2513 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 180ms · UTC 16:00 · PVG 00:00 · LAX 08:00 · JFK 11:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.