2016-07-04 58 views
1

私のExcelシートでは多くのセルに数式が含まれていますが、Apache POIでExcelを読み取ったときにこれらの式を再計算する必要はありません。POI-XSSF:数式セルからの書式設定された値を読み取るキャッシュされた値

方法私はそれを行う:

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

これは、細胞内の生の値を得ることに私を助けます。 たとえば、セルの値が19.5%の場合、これは私に0.195456を与えます。 私はフォーマットされた値を取得したい。フォーマットされた値を取得する

一つの方法は次のとおりです。

DataFormatter formatter = new DataFormatter(); 

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

これは、通常の細胞に適していますが、数式を用いて細胞のために、これは実際に式の文字列を取得し、それを表示する、すなわち、それは取得していませんキャッシュされた値を取り除き、フォーマットします。むしろ数式文字列を返します。

CELL_TYPE_FORMULAからそれを取得した後、値をフォーマットする方法はあり

答えて

3

あなたはすなわち、formatCellValueへの呼び出しでFormulaEvaluator

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

実際には、サードパーティ製のプラグインの式が使用されていますが、これはキャッシュされた値が正しくフォーマットされている必要があります – gaurav5430

2

を渡すと、それが直接フォーマットすることが可能です動作するはずです評価者を使用せずにセルのキャッシュされた値。サードパーティのプラグインやセル式の外部データが利用できないために再計算できない値の場合に便利です。

このコードはそれを行うために使用することができます:フォーマッタがまだ使用されている

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

が、メソッドformatRawCellContentsが手動でそのスタイルでセルキャッシュされた値をフォーマットするために呼び出されます。

関連する問題