Apache POI 数式の値の結果を取得する方法


動作確認3.9
タイトル通りです(´・ω・`)


わがままな対応ですな。゚(゚´Д`゚)゚。

とりあえず前回作ったソース
/**
 * セルの値を取得する。
 * @param cell セル
 * @return セルの値
 */
private Object getCellVal(Cell cell) {

 switch (cell.getCellType()) {

 case Cell.CELL_TYPE_STRING:
  // 文字列
  return cell.getRichStringCellValue().getString();
 case Cell.CELL_TYPE_NUMERIC:
  if(DateUtil.isCellDateFormatted(cell)) {
   // 日付
   return cell.getDateCellValue();
  }
  // 数値
  return cell.getNumericCellValue();
 case Cell.CELL_TYPE_FORMULA:
  // 数式
  return cell.getCellFormula();
 case Cell.CELL_TYPE_BOOLEAN:
  return cell.getBooleanCellValue();
 default :
  return null;
 }
}



またしても海外サイトで検索(´・ω・`)


最近業務上でソースを調べるときは基本海外なんだよな(´∀`)




んで発見\(^o^)/

workbook.getCreationHelper().createFormulaEvaluator().evaluateInCell(cell)
を使いなさいって書いてあったので・・・

/**
 * セルの値を取得する。
 * @param cell セル
 * @param flg フラグ
 * @return セルの値
 */
private Object getCellVal(Cell cell, boolean flg) {

 switch (cell.getCellType()) {

 case Cell.CELL_TYPE_STRING:
  // 文字列
  return cell.getRichStringCellValue().getString();
 case Cell.CELL_TYPE_NUMERIC:
  if(DateUtil.isCellDateFormatted(cell)) {
   // 日付
   return cell.getDateCellValue();
  }
  // 数値
  return cell.getNumericCellValue();
 case Cell.CELL_TYPE_FORMULA:
  // 数式
  if (!flg) {
    return cell.getCellFormula();
  }
 // 数式の結果を返す
  return getCellVal(workbook.getCreationHelper().createFormulaEvaluator().evaluateInCell(cell),true);
 case Cell.CELL_TYPE_BOOLEAN:
  return cell.getBooleanCellValue();
 default :
  return null;
 }
}


workbook.getCreationHelper().createFormulaEvaluator().evaluateInCell(cell) の戻り値はCellなので
また同じメソッドを利用して数式の結果を取得する方法を取りました(´・ω・`)


数式の結果が文字列、数値、日付、真偽値の可能性があるので再度通してチェックを行ってます。



我ながらいいプライベートメソッドが完成したな(´・ω・`)笑







0 件のコメント:

コメントを投稿