V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
GrapeCityChina
V2EX  ›  推广

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

  •  
  •   GrapeCityChina · 2022-11-24 10:36:17 +08:00 · 376 次点击
    这是一个创建于 524 天前的主题,其中的信息可能已经有所发展或是发生改变。

    背景

    在数据密集的业务领域,尤其是金融,保险,税务等行业中,经常需要利用 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

    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   986 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 23:18 · PVG 07:18 · LAX 16:18 · JFK 19:18
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.