爱迪生 发表于 2022-9-26 17:35:58

Java 操作 Office:GCExcel 之 公式函数

本帖最后由 爱迪生 于 2022-9-26 18:24 编辑

随着企业数字化进程的加速,有越来越多的企业将原本用“Excel”完成的工作迁移到线上,通过一个B/S架构来管理企业的数据,这就意味着,我们需要前端或者服务端的表格控件来处理这部分“Excel数据”,特别是一些金融领域,涉及到大量的Excel公式计算,这就对控件对Excle公式的兼容能力和计算性能提出了很高的要求,今天给大家案例两款来自葡萄城的两款表格控件,可以说是表格控件里的里“大杀器”,功能和性能上,可以说非常的“凶”!在公式函数这块功能上,更是“遥遥领先”!
一.前端表格控件:SpreadJS
首先安利的就是SpreadJS,它是基于 HTML5,兼容 450 多种 Excel 公式,具备“高性能、跨平台、与 Excel 高度兼容”的产品特性,使用 SpreadJS 的在线表格编辑器,可直接在 Angular、 React、 Vue 等前端框架中实现高效的模板设计、在线编辑和数据绑定等功能,为最终用户提供高度类似 Excel 的使用体验。
1.公式函数
spread目前支持450多种Excel函数,我们可以直接将Excel导出就可以支持公式计算,修改值以后可以实时计算

2.自定义函数
有些行业有自己特定的计算公式,spreadjs同样支持自定义函数,根据咱们业务需要,完成自定义

另外spreadjs还支持异步函数,迭代计算,数组公式,...等全面而丰富的功能,甚至连最新的LAMBDA函数都支持,更多功能可以去spreadjs的学习指南去了解
二.服务端高性能表格组件:GCExcel
有了前端表格控件,很多朋友就想问,服务端的有没有?有没有Java版的?有没有.NET平台的?不要慌,全都有!接下来我来安利服务端高性能表格组件:GCExcel
之前可能很多朋友用过POI,但是今天的这款组件,可以在功能和性能上都是完全碾压POI,可以看一下GCExcel和POI的对比,今天我们简单了解一下它强大的公式函数能力:
1.公式函数:
在GcExcel中,用户可以像在Excel中一样为单元格设置公式和表达式,当表达式中所依赖的区域的值发生变化后,也会同步计算和更新,GcExcel提供了450多个内置的函数,可以帮助用户创建非常实用和复杂的公式。
可以直接加载Excel文件进行计算,当然也支持通过api设置公式:
<font size="3"><font size="3"><font size="3">   Workbook workbook = new Workbook();
    // Fetch default worksheet
    IWorksheet worksheet = workbook.getWorksheets().get(0);

    // Set Formula in Cell E2
    worksheet.getRange("E2").setFormula("=sum(A1:A2, B4,C1:C3)");</font></font></font>
2.跨工作簿公式
GCExcel同样支持跨工作簿的公式
<font size="3"><font size="3"><font size="3">Workbook workbook = new Workbook();
workbook.getWorksheets().get(0).getRange("B1").setFormula("='Sheet1'!A1");</font></font></font>和spreadjs类似,GCExcel中同样支持数组公式,迭代计算,自定义公式等等功能,感兴趣的小伙伴可以看一下GCExcel的学习指南
三.大量公式函数性能优化:SpreadJS+GCExcel
SpreadJS基于纯前端的设计使得在使用的过程中可能会遭遇到前端的性能瓶颈。前端资源是有限的,如果我们去加载一个包含大量公式计算的Excel,举个例子诸如地产行业的投资模型,金融保险行业的金融精算表格,财税行业的底稿等等。这些Excel中,公式个数一般在10W~20W这样的数量级上,并且其中还会包含大量复杂逻辑,嵌套的公式计算。这种情况下浏览器本身就会有所限制,已经不是SpreadJS力所能及的事情了。在用户体验上,就会表现为页面运行缓慢,甚至崩溃的情况。
当然,我们也不必惊慌失措,利用另一款组件GcExcel在服务端和性能的优势,与SpreadJS双剑合璧,可以有效的对,具体实现方案可以参考葡萄城的技术社区:
SpreadJ+GcExcel 应对大量公式计算场景的解决方案


页: [1]
查看完整版本: Java 操作 Office:GCExcel 之 公式函数