我有一个模板XLS文件,我用Apache POI加载并在其中写入大量数据,然后将其另存为另一个文件 . 我的XLS文件中有公式,如下所示:
=SUMPRODUCT((DS!B:B="IN_THIS_ONLY")*(DS!D:D="New trade"))
也试过了
=SUMPRODUCT(0+(DS!B:B="IN_THIS_ONLY"),0+(DS!D:D="New trade"))
如果我在Excel中的单元格上按Enter键,这些评估正确 . 但是,只需打电话
HSSFFormulaEvaluator.evaluateAllFormulaCells(workbook);
似乎没有评估它们,也没有按下Excel中的“立即计算”按钮 - 所以我想这是一个特殊的公式或函数 .
另一个更传统的 COUNTIF
和 SUMIF
可以正常工作,但是这些不允许指定多个条件 .
POI不支持数组公式 .
有没有办法让这些工作 . 我正在使用POI版本3.7 .
2 回答
可以按 CTRL-ALT-F9 在Excel中强制手动重新评估所有公式 .
这是让它在工作簿上自动运行的技巧 .
将以下内容添加到您的公式中:
所以例如,我的
SUMPRODUCT
就变成了这有效! Excel现在重新计算我打开的特殊公式单元格 .
原因是
NOW()
是一个易失性函数 . 这是我了解到的地方:http://msdn.microsoft.com/en-us/library/bb687891.aspxApplication.CalculateFull
也可以,但仅适用于Excel 2007及更高版本(当然,必须启用宏才能运行) . 不幸的是,在我的情况下,即使我使用Excel 2007,我的工作簿也将由Excel 2003用户打开,所以这不是一个选项 .SumProduct是基于数组的公式函数吗?
如果是这样,那就可以解释这个问题 . 一种选择是向POI提供补丁以添加缺少的支持 . 关于dev列表和bugzilla已经讨论了需要什么,如果你要发布到开发列表,那么我们很乐意帮助你开始 .
否则,您可以设置formula recalculation flag并让Excel重新计算加载时的值