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 #277ProtectSheet()
和 UnprotectSheet()
方法,支持设置保护和取消保护工作表,以防止其他用户意外或故意更改,移动或删除工作表中的数据,相关 issue #273GetMergeCells()
方法,支持通过给定的工作表名称获取当前工作表中全部合并单元格的坐标与值go module
支持AddChart()
新增支持创建 二维面积图、二维堆积面积图、二维百分比堆积面积图、三维面积图、三维堆积面积图和三维百分比堆积面积图,相关 issue #311sharedStringsReader()
因缺少传统与严格模式 XML 命名空间地址转换导致的问题,解决相关 issue #276GetRows()
获取指定工作表中全部单元格,该函数的返回值将忽略工作表尾部空白行,解决了相关 issue #195GetSheetMap()
返回工作表索引与名称异常问题,解决了相关 issue #297 1
myyou 2019-01-04 11:09:59 +08:00
不错,现在的 Python 项目也用到了这个库
|
2
iamecho 2019-01-04 11:10:52 +08:00
专业,顶
|
3
yepinf 2019-01-04 11:11:50 +08:00
赞, 已 star
|
4
bellucci1964 2019-01-04 12:43:00 +08:00
借楼问一下 go 操作 word 有没有好用的库
|
5
luxurioust OP |
6
scnace 2019-01-04 13:11:18 +08:00 via Android
@bellucci1964 我刚写 Go 的时候 写了一个 github.com/scbizu/report
|
7
CCCCiiii 2019-01-04 13:38:55 +08:00
小哥哥,公司招聘高级 golang,方便加个微信聊聊么
|
8
jjx 2019-01-04 16:27:51 +08:00
不错, 现在就缺个类似 xhtml2pdf 一样的库了
|
9
reus 2019-01-04 16:48:04 +08:00
只用 gooxml
|
11
leon0903 2019-01-04 16:59:02 +08:00
这个挺好的,我们目前后端生成 excel 就是用的这个,为了方便生成通用的 excel,我还在这上面通过自定义 go 的 tag 写了一个简单的通用生成 excel 的函数。
|
12
kylix 2019-01-04 19:28:12 +08:00
收藏备用
|
13
xupefei 2019-01-04 19:33:27 +08:00
提醒一下 LZ,用 Excel 的 logo 你确定不侵权吗?
|
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 ``` 两者对比,读取文件的操作差别还是挺大的,如果文件更大的话,差距就会更明显。 |
15
luxurioust OP @xupefei 谢谢提醒,对 Excel 图标使用遵守了[微软商标和品牌指南]( https://www.microsoft.com/en-us/legal/intellectualproperty/trademarks/usage/general.aspx),已经在项目的版权说明部分增加了对商标所有权的解释说明。
|
16
luxurioust OP @ybilly Excelize 设计之初是以兼容性优先考虑来设计的,为了兼容带有相对复杂样式的 xlsx 文档做了很多内部检查,这会在一定程度上影响性能表现。对于操作工作簿内容为纯文本的场景,目前 tealeg/xlsx 表现更好。Excelize 后续会在性能方面不断做优化,同时也欢迎大家参与类库的开发、提交 patch ~
|
17
ybilly 2019-01-16 11:19:22 +08:00
@luxurioust 360 是个好库,曾经 golang 上只有 tealeg 的库,但是他的库对于读取文本以外的功能支持不多。现在多了 360,是个好事。最终可以根据项目需求来选择。
|
18
zarte 2019-03-08 15:43:02 +08:00
怎么修改图表样式呀?
|
19
luxurioust OP @zarte 暂时还不支持对图表样式的修改
|
20
zarte 2019-03-15 09:32:15 +08:00
@luxurioust 啊!有没有图表样式定义格式相关文档的连接呀?
|