動作確認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 件のコメント:
コメントを投稿