V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
left7410
V2EX  ›  程序员

请教一个涉及到读 Excel 公式动态计算的问题。

  •  
  •   left7410 · 61 天前 · 1289 次点击
    这是一个创建于 61 天前的主题,其中的信息可能已经有所发展或是发生改变。

    请教一个涉及到读 Excel 公式动态计算的问题。

    需求描述: 需求是要做一个财务预算的复杂 Excel 表格功能,第一行和 C 列的数据可以手工填写,填写后触发相对应的计算逻辑(每个格子都有不同的公式),最终将页面上所有的数据入库,下次进入页面将数据重新展示出来。

    难点: 奇葩就奇葩在,在 A 页面修改一些的值,B 页面的所有数据要根据新修改的数后台重新计算一遍并覆盖之前的数据。这样 A 页面的数据相当于字典,B 页面的第一行数据读的是 A 页面提前录入好的值。

    • 前后端页面数据交互,前台页面填报后,后台将计算好的值,返给前端。
    • 后台如何进行复杂 Excel 公式中的数据计算。

    实现方式: 领导要求用 Java 来实现,所有计算逻辑在后台做,前端只做展示( React ),本来可以用帆软报表实现就很简单,但卡点在于,A 页面填报后,B 页面无法后台进行动态的重新计算,必须要重新进入 B 页面后手工提交才行。

    目前在网上找到解决方案有: Java 使用 POI 获取 Excel 公式并计算公式得到计算结果值,但这种读出来的数据难以维护。

    Excel 内容大概是这样的: https://www.douban.com/photos/photo/2923046300/large

    第 1 条附言  ·  61 天前
    由于表达能力有限,再简单描述一下。

    用户会给一个 Excel ,里面有 A 、B 两个 sheet 页(实际上是 9 个),A 页面录入数据后,在 B 页面读取 A 页面录入好的值,然后再调整 C 列的数,最终将结果算出来的结果存在来。
    补充:B 页面里面的公式都是用户定义好的。C 列和 第 1 行的值为用户手工录入,现在就是要将这个 Excel 里面的逻辑放到 Java 代码里去实现,但是通过代码实现就涉及到前后端交互,以及公式计算的问题。而且用户要求只要修改 A 页面的数,B 页面要自动计算一遍。

    以上是大概的内容,至于 B 页面里面还有一些细节要求,比如要记录哪个用户修改了什么值,修改前的值和修改后的值,页面也要展示出来。
    9 条回复    2025-07-03 21:15:25 +08:00
    SanjinGG
        1
    SanjinGG  
       61 天前
    目前看下来和 Excel 没太大关系啊? a 输入数据给后端计算好存表里,前端每次进入 b 页面获取下数据,再给个导出 Excel 功能就行了吧?
    visper
        2
    visper  
       61 天前
    听起来像是后端会有一个 excel 模板,模板里面的一些单元格的公式是别人设置好的。然后前端填写了值,把值填写到对应的单元格,然后获取出自动计算后的单元格的值。 问 ai 的话说 poi 里面有这些触发 excel 自动计算的 FormulaEvaluator ,但是支持公式到什么程度不知道.
    execute
        3
    execute  
       61 天前
    尝试为每个 sheet 页建立一个数据库表和视图呢,表存未经计算原始数据,视图里面就是计算和取数的逻辑,查询的时候直接查视图
    eric3797
        4
    eric3797  
       61 天前
    何必杀鸡用牛刀,这个直接用 excel 自带的锁定隐藏单元格就行,不显示公式计算过程只显示结果,允许编辑的内容取消锁定即可,如示例 example: https://ttttt.link/f/6865f83c9d139
    left7410
        5
    left7410  
    OP
       61 天前
    @SanjinGG b 页面的 C 列可以手工填写
    left7410
        6
    left7410  
    OP
       61 天前
    @visper 是这样的。用户会给一个 Excel ,里面有 A 、B 两个 sheet 页,A 页面录入数据后,在 B 页面读取 A 页面录入好的值,然后再微调 C 列的值,最终将结果算出来的结果存在来。
    补充:B 页面里面的公式都是用户定义好的。C 列和 第 1 行的值为用户手工录入,现在就是要将这个 Excel 的逻辑放到 Java 代码里去实现。但是通过代码实现就涉及到前后端交互,以及公式计算的问题。
    left7410
        7
    left7410  
    OP
       61 天前
    @execute 好像打开了新思路。您的意思是计算逻辑使用 SQL 实现,表只做存储吗?目前也是一个 sheet 页一个表的设计的
    SanjinGG
        8
    SanjinGG  
       61 天前
    @left7410 #5 直接 a 页面再加一个可选输入就行吧,反正 a 页面的那个数据也是要存库里的
    execute
        9
    execute  
       61 天前
    @left7410 #7 是的
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   925 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 19:56 · PVG 03:56 · LAX 12:56 · JFK 15:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.