前后端结合解决 Excel 海量公式计算的性能问题

2022-11-24 10:36:17 +08:00
 GrapeCityChina

背景

在数据密集的业务领域,尤其是金融,保险,税务等行业中,经常需要利用 Excel 模型,来对业务进行分析和处理。例如: 1.金融投资: 根据模型进行估值计算,并对投资风险进行评估,通过测算出投资的内部收益率( IRR ),净现值( NPV )来做投资收益分析,反应项目的获利能力。 2.保险精算: 运用数学,统计学,保险学的理论和方法,对保险经营中的计算问题作定量分析,以保证保险经营的稳定性和安全性。 3.税务审计: 在定制的审计底稿上填报基础数据,通过 Excel 的公式计算汇总,整理成审计人员需要的信息,生成审计报告,常见于税费汇算清缴,税务稽查工作等。 在上述业务场景下,数据处理过程中都需要依赖很多数学计算,部分场景还需要依赖专业的数学模型。如果手工运算,不仅工程量大而且极易出错。另外,以上业务场景中的数据表格的格式也极为灵活,经常需要增加和调整。基于上述特点,以上行业的从业者往往会依赖 Excel ,利用其函数计算、汇总分析、透视表等功能,完成上述业务中的复杂数学计算。

痛点

线下操作 Excel 软件,无法进行统一管理,特别是遇到模型升级,版本更新的情况。计算结果无法与其他系统,数据库,分析工具等进行交互,形成数据孤岛。 如果用软件系统来管控,在前端页面中操作 Excel ,可以解决版本控制,以及打通数据孤岛的相关问题,但会引入新的问题:限于浏览器运行环境的资源限制,模型中蕴含大量的复杂公式计算容易造成交互端的性能瓶颈。 解决方案: 基于前端运行环境性能瓶颈的存在,不能将大量公式计算放在前端进行。我们接下来采取前后端结合的全栈方案,服务端利用 GcExcel 高效的性能进行公式计算,前端采用 SpreadJS ,利用其与 GcExcel 的兼容性和前端类 Excel 的操作和展示效果,将后端计算后的结果进行展示。 1 .读取模型之前,先用 GcExcel 在后端打开。在后端进行完整的计算。 2 .前端根据所展示的 Sheet 工作表,从后端读取对应的工作表并序列化进行传输。

3 .前端 SpreadJS 禁用公式计算,设置计算按钮改为触发式计算。 4 .前端通过脏数据获取修改记录。 5 .当主动点击计算或者切换工作表 Sheet 页签时触发请求,将修改记录发送后端,后端将修改内容修改并整体计算。再将结果根据前端所展示的 Sheet 做序列化处理并传输至前端。 6 .前端进行反序列化处理展示。

两者结合,既利用了服务端的高性能避免了前端的性能瓶颈,又利用了前端的 Excel 操作进行分 Sheet 页的展示,以及前端的脏数获取修改操作并与后端交互。

源码获取

Demo 地下载址: https://gcdn.grapecity.com.cn/forum.php?mod=attachment&aid=MjQ1NjU1fDllYzAwYjVhfDE2NjkxNjY2MTZ8NjI2NzZ8OTk3MTg%3D

396 次点击
所在节点    推广
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/897528

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX