2016-06-22 34 views
0

Ich versuche, wie unten eine Funktion zu registrieren:Erste Illegal: Unbekannte Funktion während einer Funktion Apache poi Registrierung

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); 

Aber ich bin immer Illegal wie unten:

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) 

Beachten Sie, dass die Ausnahme sagt "Unbekannte Funktion". Ich bin mir nicht sicher, was ich hier falsch mache. Jede Hilfe wird geschätzt.

Dank

Antwort

1

finden Sie in der Dokumentation unter http://poi.apache.org/spreadsheet/user-defined-functions.html unter „Ihre Funktion Registrierung“, im Grunde ausreichen sollte folgendes:

 String[] functionNames = { "calculatePayment" } ; 
     FreeRefFunction[] functionImpls = { new CalculateMortgage() } ; 

     UDFFinder udfToolpack = new DefaultUDFFinder(functionNames, functionImpls) ; 

     // register the user-defined function in the workbook 
     workbook.addToolPack(udfToolpack); 

So in Register() sollte nicht mehr notwendig sein.

Siehe auch den vollständigen Beispielcode bei https://svn.apache.org/repos/asf/poi/trunk/src/examples/src/org/apache/poi/ss/examples/formula/UserDefinedFunctionExample.java

WorkbookEvaluator.registerFunction() nur Implementierungen von bekannten Funktionen bieten kann, nicht userdefined diejenigen.

+0

Wir haben die von Ihnen vorgeschlagene Änderung vorgenommen, aber die Funktion "removeExtraChar" ist im Excel nicht verfügbar. Irgendwelche Hinweise, warum wir removeExtraChar nicht in generated excel sehen können? – Raj

+0

irgendein Update auf diesem ?? – Raj

+1

Ich glaube nicht, dass die Excel-Datei die Funktion danach "enthalten" wird. Sie haben die Funktion in Java implementiert, Excel unterstützt nur VBA. Die Absicht hier ist, Ihre VBA-Funktion neu zu implementieren, so dass POI die Datei in ähnlicher Weise wie Excel verarbeiten kann. – centic

0

Wie @centic in seinem Kommentar darauf hingewiesen, sollten Sie „WorkbookEvaluator.registerFunction()“ entfernen und auch die Funktion JAVA POI API registriert verwendet, wird nicht zur Verfügung generiert Excel sein.