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