1. ホーム
  2. java

[解決済み] Apache POIでExcelの日付のあるセルを読み込むには?

2023-07-06 09:02:45

質問

Apache POI 3.6を使っていますが、以下のような日付のエクセルファイルを読みたいです。 8/23/1991 .

 switch (cell.getCellType()) {

   ...
   ...

   case HSSFCell.CELL_TYPE_NUMERIC:
     value = "NUMERIC value=" + cell.getNumericCellValue();
     break;

   ...

 }

しかし、これは数値型を取り、次のような値を返します。 33473.0 .

Numeric Cell Typeを使おうとしたのですが、うまくいきません。

dbltemp=row.getCell(c, Row.CREATE_NULL_AS_BLANK).getNumericCellValue();

if (c == 6 || c == 9) {
    strTemp= new String(dbltemp.toString().trim());

    long tempDate = Long.parseLong(strTemp);
    Date date = new Date(tempDate);

    strVal = date.toString();
}

どうすれば問題を解決できますか?

どのように解決するのですか?

注意:HSSFDateUtilは非推奨です。

どのセル、すなわち各行の列の位置が例えば0であることが分かっている場合、次のようにすることができます。 row.getCell(0).getDateCellValue() を直接指定することができます。

http://poi.apache.org/apidocs/org/apache/poi/hssf/usermodel/HSSFCell.html#getDateCellValue()

UPDATE: 以下はその例です。上のswitch caseのコードにこれを適用できます。私は、数値と日付の値をチェックして印刷しています。この場合、私のシートの最初の列は日付を持っているので、row.getCell(0)を使用しています。

を使用することができます。 if (HSSFDateUtil.isCellDateFormatted .. のコードブロックを直接switchケースで使用します。

if (row.getCell(0).getCellType() == HSSFCell.CELL_TYPE_NUMERIC)
    System.out.println ("Row No.: " + row.getRowNum ()+ " " +
        row.getCell(0).getNumericCellValue());

    if (HSSFDateUtil.isCellDateFormatted(row.getCell(0))) {
        System.out.println ("Row No.: " + row.getRowNum ()+ " " + 
            row.getCell(0).getDateCellValue());
    }
}

出力は

Row No.: 0 39281.0
Row No.: 0 Wed Jul 18 00:00:00 IST 2007
Row No.: 1 39491.0
Row No.: 1 Wed Feb 13 00:00:00 IST 2008
Row No.: 2 39311.0
Row No.: 2 Fri Aug 17 00:00:00 IST 2007