私は Apache POI を使用して Excel データを読み取り、それらを Java で処理しています。処理するデータは Excel シートにあり、Toad から入力されます。バックエンドは Oracle であるため、データ型には、日付の場合: 07/01/2012 00:00:00 タイムスタンプの場合: 01/07/2012 00:00:00.000.
Excel ファイル名は静的ですが、含まれるデータは、さまざまなテーブル/ビューからさまざまな間隔でデータが入力されるため、異なります。
を使用してDATE列を処理できます
//Set the date format for the data fields
HSSFCellStyle dateStyle = workBook.createCellStyle();
short dateFormat = workBook.createDataFormat().getFormat("yyyy-mm-dd hh:mm:ss");
dateStyle.setDataFormat(dateFormat);
DataFormatter fmt = new DataFormatter();
if (hssfCell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC)
//Check if data in the cell is a date
if (HSSFDateUtil.isCellDateFormatted(hssfCell))
hssfCell.setCellStyle(dateStyle);
問題:
しかし、TIMESTAMP 列に関しては、HSSFCell.CELL_TYPE_NUMERIC はそれらのセルに当てはまらないため、HSSFDateUtil.isCellDateFormatted はそれらのセルでは機能しません。そのため、TIMESTAMP 列の形式を指定できません。Excel のデータと Oracle テーブルの実際のデータを (Java を使用して) クエリして比較しましたが、この書式設定の問題により一致しません。
私は Java と POI に慣れていないので、おそらくここでばかげたことを見落としていたでしょう。この問題を解決する方法について何か意見はありますか?
アップデート
代替ソリューションを求めて Web を閲覧した後、当分の間、タイムスタンプ データが特定の形式であることを期待する静的アプローチを採用しました。
String timestampIn = "dd/MM/yyyy HH:mm:ss.SSS";
String timestampOut = "yyyy-MM-dd HH:mm:ss.SSS";
try
{
Date date = (new SimpleDateFormat(timestampIn)).parse(fmt.formatCellValue(hssfCell).toString().trim());
//Add data in the cell to the ArrayList
cellTempList.add((new SimpleDateFormat(timestampOut)).format(date));
}
catch (ParseException pe) {
//Add data in the cell to the ArrayList
cellTempList.add(fmt.formatCellValue(hssfCell));
}
これは、Excel のタイムスタンプ形式が dd/MM/yyyy HH:mm:ss.SSS の形式である場合にのみ機能します。
異なる形式のタイムスタンプ値に対処するための効果的なソリューションは高く評価されます。