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

迪波威 发布于 2011/06/01 10:30
阅读 6K+
收藏 1
有一个公式逻辑很复杂的excel,现在想在页面上做成自动的,就是从页面上得到的一些值通过poi或者jxl给写进excel里,然后通过那些公式的计算,再从excel里把结果取出来,避免以前那样要自己手动打开excel来计算。
现在的问题是,服务器是linux的,JDK是1.4的,所以就不能用HSSFFormulaEvaluator.evaluateAllFormulaCells(好像是3.X以后才加上的方法)方法来实现整个工作簿公式的刷新,而一个单元格一个单元格刷新的话因为里面有IF啊这种判断的,又会报错;而用jxl呢,值放进去以后,必须要打开文件,他的公式才会去计算,否则只能取出来计算前的值。
那么如果想取出来计算后的值的话,通过poi可以实现吗?还是通过jxl赋值,然后再用程序控制打开再马上关闭那个excel文件,达到让公式运行的目的(linux下貌似不行吧)?

向各位求教了
加载中
0
dylanliang
dylanliang
为何那个公式不能直接做成个function 在java里计算呢?
0
迪波威

引用来自“Deasyliang”的答案

为何那个公式不能直接做成个function 在java里计算呢?

因为非常复杂,每行大约有12个格里有公式,1个sheet页大约有50行这样的(而且没有什么规律和顺序可言),整理出来时间可能会非常长,而且只要中间有一点整理错的地方,查都没法查,所以他不是一个公式,而是N个公式的结合

0
天天笑笑
天天笑笑

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 有支持公式

0
迪波威

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

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……

这样层层嵌套?

0
dylanliang
dylanliang
按LZ你的意思就是通过输入一堆值到EXCEL来计算然后得去一堆值返回..EXCEL只是起到一个如function般的作用...难道我理解有错误?
        理解了作用后然后直接在java里写方法是一个最佳方法了...直接忽视掉excel...
要不你像楼上说的..把excel的公式用jxl算...你的excel模板时固定的反应了一个业务逻辑的吧?
0
迪波威

引用来自“Deasyliang”的答案

按LZ你的意思就是通过输入一堆值到EXCEL来计算然后得去一堆值返回..EXCEL只是起到一个如function般的作用...难道我理解有错误?
        理解了作用后然后直接在java里写方法是一个最佳方法了...直接忽视掉excel...
要不你像楼上说的..把excel的公式用jxl算...你的excel模板时固定的反应了一个业务逻辑的吧?

是的,这个excel就是相当于function的作用,你的理解没有错误。

但是忽视掉excel,在java里直接写业务,首先要整理这个excel里面包含的所有操作吧,现在找不到文档了,就是要自己整理,前面也说了,这里面公式很多很复杂,整理起来很花时间,而且容错性很低(各种各样的if嵌套,整理起来就是一个悲剧,中间只要有一点地方整理错了,肯定会影响到最后的结果的,查的话又非常麻烦),所以我觉得,这不是一个很好的选择。

再一个就是用poi或者jxl来算了,读/写excel都不是问题,问题就是我赋值之后,怎么能得到公式计算之后的值呢?(单纯的赋值之后,取出来的结果值是没有经过公式计算的那个原始的值)

OSCHINA
登录后可查看更多优质内容
返回顶部
顶部