0

我正在搜索 Apache POI 支持的最新功能列表。

我发现的最新的是这个:http : //poi.apache.org/spreadsheet/eval-devguide.html#appendixA,但它来自 fev.2012,我没有找到版本号,所以它可能来自版本3.8b5 或 3.7 于 2010 年 10 月 29 日发布:这不是什么新鲜消息……

我目前正在使用 POI3.9,但我计划迁移到 3.10,因为在 3.10 版演示段落中有:http:/ /poi.apache.org/index.html,它被写成“增强功能(特别是在支持的公式函数的数量方面)。”

那么,您知道是否有任何最近的功能列表吗?(对于 3.9 final 还是对于 3.10 b2 ?)

另一个问题(链接到另一个问题):您知道 3.9 版或 3.10 版是否支持矩阵公式?

最好的问候, Herve

4

1 回答 1

2

您可以从 Apache POI 源代码树或使用一些 Java 代码获取该列表,但无论哪种方式都需要一点点工作。


如果您想在代码中执行此操作,则需要使用FunctionEval.getSupportedFunctionNames() 方法,该方法将返回在您的 Apache POI 版本中实现的函数列表。但是,它不会告诉您哪些类/方法实现了这些。要获取 POI 知道存在但没有实现的函数列表,您需要相关的FunctionEval.getNotSupportedFunctionNames() 方法。请注意,后者并不详尽,好像 POI 不知道函数的名称,它无法告诉您它不是什么!

对于分析工具库函数,有一组匹配的方法可用。这些是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是TIMEExcel中的函数,我们知道它已经实现了。同样,功能 67 存在DAY并且也存在。

如果我们再往下看 FunctionEval,我们会看到这一点:

retval[74] = new Now();

retval[76] = new Rows();

在functionMetadata.txt中查找,我们可以看到74NOW和76ROWS都实现了,但是75AREAS目前没有实现。

此外,还有一些来自分析工具包的其他功能。对于这些,您需要查看AnalysisToolPak的源代码。在该createFunctionsMap部分中,您将在那里看到如下行:

 r(m, "YEARFRAC", YearFrac.instance);
 r(m, "YIELD", null);

这告诉您该YEARFRAC功能已实现,但未实现YIELD

于 2013-12-27T04:31:29.447 回答