30

JavaでのExcel操作にPOI HSSF APIを使用しています。Excel セルの 1 つに「2009 年 8 月 1 日」という日付値があり、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の日付をそのまま読み取る方法はありますか!?

4

5 に答える 5

39

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

HSSFDateUtil.isCellDateFormatted()

HSSFDateUtilの詳細については、POI Horrible SpreadsheetFormatAPIを参照してください。

http://poi.apache.org/apidocs/org/apache/poi/hssf/usermodel/HSSFDateUtil.html

getExcelDate()また、ExcelとJavaの日付を返すためのいくつかのヘルパーメソッドも提供しますgetJavaDate()。ただし、さまざまな日付形式にいくらか注意する必要があります...

于 2009-05-14T07:05:44.383 に答える
21

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
}
于 2011-08-31T18:09:37.460 に答える
6

Excelは日付と時刻を数値として扱います...ジョンはそれをよりよく言ったので、ここでは彼をエコーし​​ません...

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

于 2009-05-14T07:10:36.837 に答える
6

POI 3.5を使用している場合は、次を使用できます

cell.getDateCellValue() メソッド。これはExcel 2007でも機能します。

于 2010-08-04T07:38:47.760 に答える