2016-07-04 10 views
1

In meiner Excel-Tabelle enthalten viele Zellen Formeln, ich möchte diese Formeln nicht neu berechnen, wenn ich die Excel mit Apache POI gelesen habe.POI-XSSF: formatierten Wert aus Formelzellen zwischengespeicherten Wert lesen

Die Art, wie ich das tun:

if(cell.getCellType() == XSSFCell.CELL_TYPE_FORMULA) { 

    //System.out.println("Formula is " + cell.getCellFormula()); 
    switch(cell.getCachedFormulaResultType()) { 
     case XSSFCell.CELL_TYPE_NUMERIC: 

      System.out.print(cell.getNumericCellValue() +" "); 

      break; 
     case XSSFCell.CELL_TYPE_STRING: 
      System.out.print(cell.getRichStringCellValue()+" "); 
      break; 
    } 
} 

Das hilft mir in der Zelle den Rohwert zu bekommen. Zum Beispiel, wenn die Zelle einen Wert von 19,5% hat, gibt dies mir 0,195456. Ich möchte den formatierten Wert erhalten.

Eine Möglichkeit, den formatierten Wert zu erhalten ist:

DataFormatter formatter = new DataFormatter(); 

System.out.print(formatter.formatCellValue(cell)); 

Das funktioniert gut für die regelmäßige Zellen, aber mit Formeln für Zellen, dies wird tatsächlich die Formel-String und zeigt sie an, das heißt, sie bekommen nicht das Cache-Wert und formatiert es, sondern gibt nur die Formelzeichenfolge zurück.

Gibt es eine Möglichkeit, einen Wert zu formatieren, nachdem es von CELL_TYPE_FORMULA Abrufen

Antwort

3

Es sollte funktionieren, wenn Sie in einem FormulaEvaluator im Aufruf von formatCellValue passieren, dh

DataFormatter formatter = new DataFormatter(); 
FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator(); 
System.out.print(formatter.formatCellValue(cell, evaluator)); 
+1

tatsächlich sind die Formeln von einem Drittanbieter-Plugin, die ich nicht verwenden werde, ich brauche nur die zwischengespeicherten Werte korrekt formatiert werden – gaurav5430

2

Es ist möglich, direkt das Format Cache-Wert einer Zelle ohne Verwendung eines Evaluators. Dies ist nützlich bei Werten, die aufgrund eines Plug-ins von Drittanbietern oder nicht verfügbarer externer Daten in der Zellenformel nicht neu berechnet werden können.

Dieser Code kann das zu tun, verwendet werden: ist

final DataFormatter dataFormatter = new DataFormatter(); 

final CellStyle cellStyle = cell.getCellStyle(); 
final String formtatedValue = dataFormatter.formatRawCellContents(cell.getNumericCellValue(), cellStyle.getDataFormat(), cellStyle.getDataFormatString()); 
System.out.println(formattedValue); 

Ein Formatierer noch verwendet, aber die Methode formatRawCellContents heißt mit seinem Stil die Zelle zwischengespeichert Wert manuell zu formatieren.