Apache POI中excel支持的函数的uptodate列表

时间:2013-12-26 09:11:41

标签: excel function apache-poi formulas array-formulas

我正在搜索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

1 个答案:

答案 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函数未实现。