开发者社区> 问答> 正文

用java读/写带公式的excel的问题:报错

有一个公式逻辑很复杂的excel,现在想在页面上做成自动的,就是从页面上得到的一些值通过poi或者jxl给写进excel里,然后通过那些公式的计算,再从excel里把结果取出来,避免以前那样要自己手动打开excel来计算。

现在的问题是,服务器是linux的,JDK是1.4的,所以就不能用HSSFFormulaEvaluator.evaluateAllFormulaCells(好像是3.X以后才加上的方法)方法来实现整个工作簿公式的刷新,而一个单元格一个单元格刷新的话因为里面有IF啊这种判断的,又会报错;而用jxl呢,值放进去以后,必须要打开文件,他的公式才会去计算,否则只能取出来计算前的值。

那么如果想取出来计算后的值的话,通过poi可以实现吗?还是通过jxl赋值,然后再用程序控制打开再马上关闭那个excel文件,达到让公式运行的目的(linux下貌似不行吧)?

向各位求教了

展开
收起
kun坤 2020-06-09 11:01:58 2410 0
2 条回答
写回答
取消 提交回答
  • github.com/xuri

    分享一个功能丰富、兼容性好、高性能的专业 Excel 文档基础库 Excelize:https://github.com/xuri/excelize https://xuri.me/excelize/images/excelize.svg 文档官网 : https://xuri.me/excelize 技术交流 QQ 群: 207895940 DingTalk 钉钉群: 30047129 Excelize 技术交流

    2021-02-22 17:01:14
    赞同 2 展开评论 打赏
  • 为何那个公式不能直接做成个function 在java里计算呢?

    ######

    引用来自“Deasyliang”的答案

    为何那个公式不能直接做成个function 在java里计算呢?
    因为非常复杂,每行大约有12个格里有公式,1个sheet页大约有50行这样的(而且没有什么规律和顺序可言),整理出来时间可能会非常长,而且只要中间有一点整理错的地方,查都没法查,所以他不是一个公式,而是N个公式的结合 ######NumberFormat dp3 = new NumberFormat("#.###"); // 设置单元格里面的数字格式 WritableCellFormat dp3cell = new WritableCellFormat(dp3); dp3cell.setWrap(true); Formula f = new Formula(2, 9, "(a10+b10)/2", dp3cell); // 设置C10公式 sheet.addCell(f); f = new Formula(3, 9, "SUM(A10:B10)", dp3cell);// 设置D10公式 sheet.addCell(f);   jxl.jar 有支持公式######

    引用来自“天天笑笑”的答案

    NumberFormat dp3 = new NumberFormat("#.###"); // 设置单元格里面的数字格式 WritableCellFormat dp3cell = new WritableCellFormat(dp3); dp3cell.setWrap(true); Formula f = new Formula(2, 9, "(a10+b10)/2", dp3cell); // 设置C10公式 sheet.addCell(f); f = new Formula(3, 9, "SUM(A10:B10)", dp3cell);// 设置D10公式 sheet.addCell(f);   jxl.jar 有支持公式
    他不是单纯的一个公式,而是N个公式相互嵌套的,可能有12×50这么多公式的嵌套,难道我要把他们都取出来,然后再一个一个的设置回去?那不用考虑计算逻辑的顺序问题么? 比如说: 通过A1和A2的值,他先计算出W7,然后再通过W7的值算出C9,然后再通过C9和A2的值算出G15…… 那是设置公式的时候的顺序就是:W7=>C9=>G15…… 这样层层嵌套? ######按LZ你的意思就是通过输入一堆值到EXCEL来计算然后得去一堆值返回..EXCEL只是起到一个如function般的作用...难道我理解有错误?         理解了作用后然后直接在java里写方法是一个最佳方法了...直接忽视掉excel... 要不你像楼上说的..把excel的公式用jxl算...你的excel模板时固定的反应了一个业务逻辑的吧? ######

    引用来自“Deasyliang”的答案

    按LZ你的意思就是通过输入一堆值到EXCEL来计算然后得去一堆值返回..EXCEL只是起到一个如function般的作用...难道我理解有错误?         理解了作用后然后直接在java里写方法是一个最佳方法了...直接忽视掉excel... 要不你像楼上说的..把excel的公式用jxl算...你的excel模板时固定的反应了一个业务逻辑的吧?
    是的,这个excel就是相当于function的作用,你的理解没有错误。 但是忽视掉excel,在java里直接写业务,首先要整理这个excel里面包含的所有操作吧,现在找不到文档了,就是要自己整理,前面也说了,这里面公式很多很复杂,整理起来很花时间,而且容错性很低(各种各样的if嵌套,整理起来就是一个悲剧,中间只要有一点地方整理错了,肯定会影响到最后的结果的,查的话又非常麻烦),所以我觉得,这不是一个很好的选择。 再一个就是用poi或者jxl来算了,读/写excel都不是问题,问题就是我赋值之后,怎么能得到 公式计算之后的值呢?(单纯的赋值之后,取出来的结果值是没有经过公式计算的那个原始的值)
    2020-06-09 15:44:40
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载