Apache POI getCell でDate型を取得する


動作確認3.9
Apache POI でセルの値を取得する時、cell.getCellType()を判断して値を取得すると思うんだが、このソースだとDate型が判断できなかった(´;ω;`)


ソース例
/**
 * セルの値を取得する。
 * @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:
  // 数値
  return cell.getNumericCellValue();
 case Cell.CELL_TYPE_FORMULA:
  // 数式
  return cell.getCellFormula();
 case Cell.CELL_TYPE_BOOLEAN:
  return cell.getBooleanCellValue();
 default :
  return null;
 }
}



っていうメソッドを作ったんだが、Date型の値の場合、Cell.CELL_TYPE_NUMERICで判断されてしまう><



調べたら海外のサイトでいい情報発見\(^o^)/


org.apache.poi.ss.usermodel.DateUtil 使えばいいんだよって言う情報を取得し早速設定♪

/**
 * セルの値を取得する。
 * @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;
 }
}



これで取得できる(*ノェノ)キャー



これで色々テストしたんだが、2013/12/33 や 2020年56月11日 などの不正な日付はString型として判断されます(・∀・)



0 件のコメント:

コメントを投稿