2017-06-27 3 views
0

Ich habe ein Excel-Blatt (xslx), wo ich eine Array-Formel definiert haben (https://support.office.com/en-us/article/Guidelines-and-examples-of-array-formulas-7D94A64E-3FF3-4686-9372-ECFD5CAA57C7). Das funktioniert wie ein Charme in excel isselt. Ich benutze Apache Poi, um einige Werte in diesem Excel-Blatt programmatisch zu manipulieren. Nach dieser Manipulation möchte ich das Ergebnis dieser Array-Formel neu berechnen, aber ich weiß nicht, wie ich es machen soll. mit "normalen" Formel I tun es, wie folgend:Array Formel in Apache poi

FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator(); 
XSSFRow row = sheet.getRow(i); 
Cell cell = row.getCell(j); 
evaluator.evaluateCell(cell); 
double value = cell.getNumericValue(); 

Bei Array Formel gibt es das Verfahren

void setCellArrayFormula(String formula, CellRangeAddress range) 

in der Klasse XSSFCell und

public CellRange<XSSFCell> setArrayFormula(String formula, CellRangeAddress range) 

in der Klasse XSSFSheet .

Nach der Formel mit einem Aufruf Einstellung wie cell.setCellArrayFormula("SUM(ABS(H2:H5))", new CellRangeAddress(2,5,7,7)); ich weiß nicht, wie das Ergebnis dieser Formel zu bekommen (aber ich bin auch nicht sicher, ob dies der richtige Weg ist, um die Matrixformel in Apache Poi zu verwenden. In Excel ich muss es so tun {=SUM(ABS(H2:H5))})

Kann jemand die Array-Formel in Apache Poi verwenden? Vielen Dank!

Antwort

1

Die aktuelle Version von Apache POI (3.17) unterstützt keine Array-Formeln wie diese. Was (glaube ich) Sheet.setArrayFormula() tut ist die gleiche Formel auf eine Reihe von Zellen anwenden, um die Dateigröße zu optimieren.

Was Sie wollen POI manchmal als "Tabelle Formel" bezeichnet und wird nicht unterstützt (https://poi.apache.org/spreadsheet/formula.html).

Die gute Nachricht ist jedoch, dass einige Unterstützung für diese Arten von Formeln in POI 4.0 (derzeit begrenzt auf Matrix-Operationen, obwohl Ihr Beispiel immer noch nicht in der aktuellen Nacht funktioniert) kommt. Warum sind das gute Neuigkeiten? Weil die Teile anfangen, sich zu etablieren, werden all diese Formeln irgendwann unterstützt werden. Also ich denke, dass es passieren wird (Anmerkung: Ich bin nicht am POI-Projekt beteiligt, ich benutze es einfach, und diese Funktion ist mir wichtig).