获取IllegalArgumentException:注册一个函数Apache poi时未知的函数

我正在尝试注册一个函数如下:

String[] functionNames = { "removeExtraChar" } ; FreeRefFunction[] functionImpls = { new RemoveExtraChar() } ; UDFFinder udfToolpack = new DefaultUDFFinder( functionNames, functionImpls ) ; // register the user-defined function in the workbook workbook.addToolPack(udfToolpack); System.out.println("Registered function"); Function func = new Function() { public ValueEval evaluate(ValueEval[] args, int srcRowIndex, int srcColumnIndex) { return ErrorEval.NA; } }; WorkbookEvaluator.registerFunction("testRemoveExtraChar", func); 

但是我得到IllegalargumentException如下:

 java.lang.IllegalArgumentException: Unknown function: testRemoveExtraChar at org.apache.poi.ss.formula.eval.FunctionEval.registerFunction(FunctionEval.java:354) at org.apache.poi.ss.formula.WorkbookEvaluator.registerFunction(WorkbookEvaluator.java:773) 

请注意,例外说“未知的function”。 我不知道我在这里做错了什么。 任何帮助表示赞赏。

谢谢

请参阅“注册您的function”下的http://poi.apache.org/spreadsheet/user-defined-functions.html文档,基本上以下内容应该足够了:

  String[] functionNames = { "calculatePayment" } ; FreeRefFunction[] functionImpls = { new CalculateMortgage() } ; UDFFinder udfToolpack = new DefaultUDFFinder( functionNames, functionImpls ) ; // register the user-defined function in the workbook workbook.addToolPack(udfToolpack); 

所以registerFunction()应该不再需要了。

请参阅https://svn.apache.org/repos/asf/poi/trunk/src/examples/src/org/apache/poi/ss/examples/formula/UserDefinedFunctionExample.java上的完整示例代码

WorkbookEvaluator.registerFunction()只允许提供已知函数的实现,而不是用户定义的函数。

正如@centic在他的评论中指出的那样,你应该删除“WorkbookEvaluator.registerFunction()”并且使用JAVA POI API注册的函数将不能用于生成的Excel。