获取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()应该不再需要了。
WorkbookEvaluator.registerFunction()
只允许提供已知函数的实现,而不是用户定义的函数。
正如@centic在他的评论中指出的那样,你应该删除“WorkbookEvaluator.registerFunction()”并且使用JAVA POI API注册的函数将不能用于生成的Excel。