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

发布于 1周前 作者 h691938207 来自 Go语言

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

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, 大量的文档更新

更多关于Golang Go语言 Excel 文档类库 excelize 发布 1.4.1 版本的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html

21 回复

不错,现在的 Python 项目也用到了这个库

更多关于Golang Go语言 Excel 文档类库 excelize 发布 1.4.1 版本的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


赞, 已 star

借楼问一下 go 操作 word 有没有好用的库

我刚写 Go 的时候 写了一个 github.com/scbizu/report

小哥哥,公司招聘高级 golang,方便加个微信聊聊么

不错, 现在就缺个类似 xhtml2pdf 一样的库了

只用 gooxml

哇,挖 360 的墙角

这个挺好的,我们目前后端生成 excel 就是用的这个,为了方便生成通用的 excel,我还在这上面通过自定义 go 的 tag 写了一个简单的通用生成 excel 的函数。

提醒一下 LZ,用 Excel 的 logo 你确定不侵权吗?

最近刚使用这个库做了个通用的库

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)

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

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

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

两者对比,读取文件的操作差别还是挺大的,如果文件更大的话,差距就会更明显。

Excelize 设计之初是以兼容性优先考虑来设计的,为了兼容带有相对复杂样式的 xlsx 文档做了很多内部检查,这会在一定程度上影响性能表现。对于操作工作簿内容为纯文本的场景,目前 tealeg/xlsx 表现更好。Excelize 后续会在性能方面不断做优化,同时也欢迎大家参与类库的开发、提交 patch ~

360 是个好库,曾经 golang 上只有 tealeg 的库,但是他的库对于读取文本以外的功能支持不多。现在多了 360,是个好事。最终可以根据项目需求来选择。

怎么修改图表样式呀?

暂时还不支持对图表样式的修改

啊!有没有图表样式定义格式相关文档的连接呀?

Excelize作为Go语言编写的Excel文档类库,其1.4.1版本的发布无疑为Go语言开发者在处理Excel文件时提供了更多的功能和便利。以下是对此版本的简要回复:

Excelize 1.4.1版本的发布,标志着这个Go语言Excel文档类库又向前迈进了一步。此版本新增了多项功能,并对部分问题进行了修复,具体亮点包括:

  1. 新增功能

    • WriteTo()方法:通过实现io.WriterTo接口,支持文件写入。
    • SearchSheet()方法:支持通过工作表名称、单元格值或正则表达式搜索指定工作表。
    • ProtectSheet()和UnprotectSheet()方法:支持设置和取消保护工作表。
    • GetMergeCells()方法:支持获取当前工作表中全部合并单元格的坐标与值。
  2. 图表创建优化:AddChart()函数新增支持创建多种面积图。

  3. 问题修复:针对内部函数、图表格式设置、单元格公式获取、工作表索引与名称异常等问题进行了修复。

总的来说,Excelize 1.4.1版本在功能和稳定性上都得到了显著提升,为Go语言开发者提供了更加强大和可靠的Excel文档处理工具。如果你正在寻找一个能够处理复杂Excel任务的Go语言库,Excelize绝对值得一试。

回到顶部