Golang Excelize 2.4.0 发布——新增支持152种公式函数
Golang Excelize 2.4.0 发布——新增支持152种公式函数

我们很高兴地宣布版本 2.4.0 的发布。此版本包含了一系列新功能领域和大量的错误修复。
GitHub: github.com/xuri/excelize
发布说明
此版本中最显著的变化包括:
兼容性
升级要求 Go 语言版本为 1.15 或更高。
显著特性
- 新增 API
GetCellRichText,支持通过给定的工作表获取单元格的富文本 - 现在支持通过
SetPageLayout和GetPageLayout来设置和获取:打印缩放比例、黑白打印以及指定工作表的首页打印页码 - 现在支持通过
SetSheetPrOptions和GetSheetPrOptions来更改和获取工作表的标签颜色 SetCellHyperlink现在支持设置超链接显示文本和工具提示文本,相关议题 #790- 在添加数据透视表时支持
ShowError选项 - 在流式 API 中支持为单元格设置公式,相关议题 #625
- 公式计算引擎现在支持不等于运算符
- 嵌套公式函数现在支持单元格引用作为参数
- 支持指定系列中的每个数据标记具有不同的颜色
- 新增支持 152 个公式函数:ATAN, AVERAGE, AVERAGEA, BESSELI, BESSELJ, BIN2DEC, BIN2HEX, BIN2OCT, BITAND, BITLSHIFT, BITOR, BITRSHIFT, BITXOR, CHAR, CHOOSE, CLEAN, CODE, COLUMN, COLUMNS, COMPLEX, CONCAT, CONCATENATE, COUNT, COUNTBLANK, CUMIPMT, CUMPRINC, DATE, DATEDIF, DB, DDB, DEC2BIN, DEC2HEX, DEC2OCT, DOLLARDE, DOLLARFR, EFFECT, ENCODEURL, EXACT, FALSE, FIND, FINDB, FISHER, FISHERINV, FIXED, FV, FVSCHEDULE, GAMMA, GAMMALN, HARMEAN, HEX2BIN, HEX2DEC, HEX2OCT, HLOOKUP, IF, IFERROR, IMABS, IMAGINARY, IMARGUMENT, IMCONJUGATE, IMCOS, IMCOSH, IMCOT, IMCSC, IMCSCH, IMDIV, IMEXP, IMLN, IMLOG10, IMLOG2, IMPOWER, IMPRODUCT, IMREAL, IMSEC, IMSECH, IMSIN, IMSINH, IMSQRT, IMSUB, IMSUM, IMTAN, IPMT, IRR, ISTEXT, ISPMT, KURT, LARGE, LEFT, LEFTB, LEN, LENB, LOOKUP, LOWER, MAX, MID, MIDB, MIN, MINA, MIRR, N, NOMINAL, NORM.DIST, NORMDIST, NORM.INV, NORMINV, NORM.S.DIST, NORMSDIST, NORM.S.INV, NORMSINV, NOT, NOW, NPER, NPV, OCT2BIN, OCT2DEC, OCT2HEX, PDURATION, PERCENTILE.INC, PERCENTILE, PERMUT, PERMUTATIONA, PMT, POISSON.DIST, POISSON, PPMT, PROPER, QUARTILE, QUARTILE.INC, REPLACE, REPLACEB, REPT, RIGHT, RIGHTB, ROMAN, ROW, ROWS, SHEET, SKEW, SMALL, STDEV, STDEV.S, STDEVA, SUBSTITUTE, T, TODAY, TRIM, TRUE, UNICHAR, UNICODE, UPPER, VAR.P, VARP, VLOOKUP
提升兼容性
- 现在当使用
SetCellValue并传入nil时,会为单元格设置空字符串,解决了议题 #756 - 移除了样式图案填充颜色上无用的内部 XML omitempty 标签
- 修复了与 Google Sheets 离线浏览器扩展的兼容性问题 #769
- 在自动筛选定义的名称中使用绝对引用,使其与 OpenOffice 兼容,解决了议题 #776
- 在工作表行/列迭代器 XML SAX 解析器中处理结束元素事件,加快行/列迭代速度,并修复了在某些情况下读取文件行数不一致的问题
- 提高了工作表相对 XML 路径的兼容性
- 避免重复的富文本字符串项 #787
- 提高了绝对 XML 路径、Windows 风格目录分隔符和内联命名空间的兼容性
错误修复
- 修复舍入精度问题 #764
- 添加了缺失的字段并更改了工作簿字段的顺序,防止在某些情况下生成损坏的文件,解决了议题 #766
- 修复双曲余切计算不正确的问题
- 修正了在复制行时调整计算链的问题,解决了议题 #774
- 修正了在删除工作表时调整工作簿中定义名称的问题,解决了议题 #775
- 修复了内部函数
newFills和parseToken的圈复杂度问题 - 修复自定义行高检查问题
- 修复取消合并所有单元格导致文件损坏的问题,解决了议题 #782
- 修复保存后部分自动筛选规则丢失的问题
- 修复当存在图表工作表或对话框工作表时
UpdateLinkedValue返回错误的问题 - 修复在某些情况下
GetColWidth返回的默认列宽不正确的问题 - 修复无法为生成的电子表格中的数据透视表添加时间线和切片器的问题,解决了议题 #804
- 修复 SetDefinedName 的
localSheetId属性错误地使用了sheetIndex的问题 - 修复在某些情况下单元格锁定或隐藏保护缺失的问题,解决了议题 #809
- 修复调用普通 API 后流式数据写入器结果丢失的问题,解决了议题 #813
- 修复负值系列图表颜色缺失的问题
性能
- 更快的数值精度处理
杂项
- 已更新依赖模块
- 已更新单元测试和 godoc
- 已更新多语言文档网站:阿拉伯语、德语、西班牙语、英语、法语、俄语、中文、日语和韩语
更多关于Golang Excelize 2.4.0 发布——新增支持152种公式函数的实战教程也可以访问 https://www.itying.com/category-94-b0.html
更多关于Golang Excelize 2.4.0 发布——新增支持152种公式函数的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
Excelize 2.4.0的发布确实是一个重要的里程碑,特别是新增了对152种公式函数的支持,这极大地增强了库在复杂电子表格处理方面的能力。以下是对其中一些关键新特性的技术解读和示例:
1. 新增公式函数支持
新版本增加了诸如XLOOKUP、FILTER、LET等现代Excel函数,使得在Go中处理动态数组和复杂查找成为可能。例如,使用XLOOKUP进行双向查找:
f := excelize.NewFile()
f.SetCellFormula("Sheet1", "C1", "=XLOOKUP(A1, B1:B10, C1:C10)")
2. 流式API支持公式 现在可以在流式写入模式下设置单元格公式,这对生成大型报表非常有用:
streamWriter, _ := f.NewStreamWriter("Sheet1")
row := []interface{}{excelize.Cell{Formula: "=SUM(A1:A10)"}}
streamWriter.SetRow("A1", row)
3. 增强的富文本处理
GetCellRichText API允许精确提取单元格中的格式化文本片段:
runs, _ := f.GetCellRichText("Sheet1", "A1")
for _, run := range runs {
fmt.Printf("Text: %s, Font: %+v\n", run.Text, run.Font)
}
4. 改进的页面布局控制 新增的页面布局选项支持更精细的打印控制:
f.SetPageLayout("Sheet1",
&excelize.PageLayout{
BlackAndWhite: excelize.BoolPtr(true),
FirstPageNumber: excelize.UintPtr(2),
})
5. 数据透视表增强
ShowError选项允许更好地控制数据透视表中的错误显示:
pivotTable := excelize.PivotTableOptions{
DataRange: "Sheet1!$A$1:$D$10",
ShowError: true,
}
6. 性能优化 新的数值精度处理算法在处理大型数值数据集时性能提升显著:
// 自动受益于底层优化
f.SetCellValue("Sheet1", "A1", 123456.7890123456789)
这些改进使得Excelize在处理企业级Excel文件时更加可靠和高效,特别是在需要复杂计算和大量数据处理的场景下。新增的公式函数覆盖了统计、金融、工程等多个专业领域,大大扩展了库的应用范围。

