質問

Java での Excel 操作に POI HSSF API を使用しています。Excel セルの 1 つに日付値「8/1/2009」があり、HSSF API を使用してこの値を読み取ろうとすると、セルのタイプが数値として検出され、日付の「Double」値が返されます。以下のサンプルコードを参照してください。

cell = row.getCell(); // date in the cell '8/1/2009'
switch (cell.getCellType()) {

case HSSFCell.CELL_TYPE_STRING:
    cellValue = cell.getRichStringCellValue().getString();
    break;
case HSSFCell.CELL_TYPE_NUMERIC:
    cellValue = new Double(cell.getNumericCellValue()).toString();
    break;
default:
}

Cell.getCellType() は NUMERIC_TYPE を返すため、このコードは日付を double に変換します。:(

HSSF POIの日付をそのまま読む方法はないでしょうか!?

役に立ちましたか?

解決

あなたは見てみることができます:

HSSFDateUtil.isCellDateFormatted()

HSSFDateUtilの詳細については、POI恐ろしいスプレッドシート形式のAPIを参照してください。

http://poi.apache.org/ apidocs / ORG / apacheの/ポイ/ HSSF / usermodel / HSSFDateUtil.htmlする

また、ExcelのgetExcelDate()を返すためのいくつかのヘルパーメソッドを提供し、JavaはgetJavaDate()をさかのぼること。あなたは、異なる日付形式のやや警戒する必要があるけれども...

他のヒント

あなたはExcelファイルのように同じ形式で日付を参照したい場合は、

は、あなたがCellDateFormatterを使用する必要があります。サンプルコード:

CellValue cValue = formulaEv.evaluate(cell);
double dv = cValue.getNumberValue();
if (HSSFDateUtil.isCellDateFormatted(cell)) {
    Date date = HSSFDateUtil.getJavaDate(dv);

    String dateFmt = cell.getCellStyle().getDataFormatString();
    /* strValue = new SimpleDateFormat(dateFmt).format(date); - won't work as 
    Java fmt differs from Excel fmt. If Excel date format is mm/dd/yyyy, Java 
    will always be 00 for date since "m" is minutes of the hour.*/

    strValue = new CellDateFormatter(dateFmt).format(date); 
    // takes care of idiosyncrasies of Excel
}

Excelでは日付と時刻が数値として扱われます...ジョンの方がよく言ったので、ここでは繰り返しません...

ただし、質問に入力したサンプルコードは次のとおりです。 http://poi.apache.org/spreadsheet/quick-guide.html#CellContents

は、あなたが使用できるPOI 3.5を使用している場合は、次の

cell.getDateCellValue()メソッド。これは、同様にExcel 2007のために動作します。

POI 3.15ベータ3以来、いくつかの機能がdeprecatedです。 あなたは、データの形式を確認し、Java Dateとして取得することができます。

SimpleDateFormat format = new SimpleDateFormat("");
String cellValue;
if(cell != null && cell.getCellTypeEnum() != CellType.STRING &&
    cell.getCellTypeEnum() == CellType.NUMERIC && DateUtil.isCellDateFormatted(cell)){

    cellValue = format.format(cell.getDateCellValue());
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top