我正在搜索Apache POI支持的最新功能列表。
我找到的最新版本是http://poi.apache.org/spreadsheet/eval-devguide.html#appendixA,但是它来自fev.2012并且我没有找到版本号,所以它可能来自于2010年10月29日发布的版本3.8b5或3.7:这不是那么新鲜的消息......
我目前正在使用POI3.9,但我计划迁移到3.10,因为在版本3.10演示文稿段落中http://poi.apache.org/index.html,它写成“增强功能(特别是支持的公式函数数量)。”
那么,你知道在任何地方是否有更新的功能列表? (无论是3.9决赛还是3.10 b2?)
另一个问题(与另一个问题相关):你知道版本3.9或3.10是否支持矩阵公式?
最好的祝福,
的Herve
答案 0 :(得分:1)
您可以从Apache POI源代码树或某些Java代码中获取列表,但无论如何都需要进行一些工作。
如果您想在代码中执行此操作,则需要使用FunctionEval.getSupportedFunctionNames() method,它将返回您的Apache POI版本中实现的函数列表。但是,它不会告诉您哪些类/方法实现了这些。要获得POI知道存在但没有实现的函数列表,您需要相关的FunctionEval.getNotSupportedFunctionNames() method。请注意,后者不会是详尽无遗的,好像POI不知道函数的名称,它将无法告诉你它不是什么!
对于Analysis ToolPak函数,有一组匹配的方法可用。这些是AnalysisToolPak.getSupportedFunctionNames()和AnalysisToolPak.getNotSupportedFunctionNames()
或者,您可以从源树中找到所需内容。
首先,您需要查看FunctionEval.java,它定义了将公式函数ID查找到实现逻辑的类。无论POI实现给定函数,您都可以在该类的主查找块中找到一个条目。例如,
retval[66] = new TimeFunc();
retval[67] = CalendarFieldFunction.DAY;
在某些情况下,很明显可以确定给定函数ID的excel中的函数。在其他人中,你需要查找它们。为此,您需要functionMetadata.txt。在这里,您将看到如下条目:
66 TIME 3 3 V V V V
67 DAY 1 1 V V
由此可以看出,函数66是Excel中的TIME
函数,我们知道它已经实现。同样,函数67是DAY
并且也存在。
如果我们进一步了解FunctionEval,我们会看到这一点:
retval[74] = new Now();
retval[76] = new Rows();
在functionMetadata.txt中查看,我们可以看到74 NOW
和76 ROWS
都已实现,但75 AREAS
目前未已实现。
此外,还有一些来自Analysis Toolpack的其他功能。对于那些人,您需要查看AnalysisToolPak的来源。在createFunctionsMap
部分,您会看到如下行:
r(m, "YEARFRAC", YearFrac.instance);
r(m, "YIELD", null);
这告诉您YEARFRAC
函数已实现,但YIELD
函数未实现。