0

私は 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 の形式である場合にのみ機能します。

異なる形式のタイムスタンプ値に対処するための効果的なソリューションは高く評価されます。

4

1 に答える 1

0

OK、それを行う簡単な方法があります。

DBからTIMESTAMPデータ型の列名を取得し、Excelシートのヘッダーと比較します。

ExcelヘッダーがDBの列名と一致する場合は、別のSimpleDateFormat( "yyyy-MM-dd'T'HH:mm:ss.S'Z'")を使用して、アクティビティを実行します。

大丈夫ですか?

于 2012-11-28T10:27:26.490 に答える