Как прочитать ячейку Excel, имеющую Date с Apache POI? - PullRequest
51 голосов
/ 30 июня 2010

Я использую Apache POI 3.6, я хочу прочитать файл Excel, у которого есть такая дата 8/23/1991.

 switch (cell.getCellType()) {

   ...
   ...

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

   ...

 }

Но он принимает тип числового значения и возвращает значение, подобное этому 33473.0.

Я пытался использовать числовой тип ячейки, но безуспешно.

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();
}

Как я могу исправить мою проблему?

Ответы [ 5 ]

94 голосов
/ 30 июня 2010

Если вы знаете, какая ячейка, то есть позиция столбца, скажем, 0 в каждой строке, будет датой, вы можете перейти к row.getCell(0).getDateCellValue() напрямую.
http://poi.apache.org/apidocs/org/apache/poi/hssf/usermodel/HSSFCell.html#getDateCellValue()

ОБНОВЛЕНИЕ: Вот пример - вы можете применить это в приведенном выше коде коммутатора. Я проверяю и печатаю числовое значение, а также значение даты. В этом случае в первом столбце моего листа есть даты, поэтому я использую row.getCell (0).

Кодовый блок if (HSSFDateUtil.isCellDateFormatted .. можно использовать непосредственно в корпусе коммутатора.

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
8 голосов
/ 22 февраля 2017

Да, я понял вашу проблему.Если трудно идентифицировать ячейку, имеет числовое значение или значение данных.

Если вам нужны данные в формате, который отображается в Excel, вам просто нужно отформатировать ячейку с использованием класса DataFormatter.

DataFormatter dataFormatter = new DataFormatter();
String cellStringValue = dataFormatter.formatCellValue(row.getCell(0));
System.out.println ("Is shows data as show in Excel file" + cellStringValue);  // Here it automcatically format data based on that cell format.
// No need for extra efforts 
0 голосов
/ 29 мая 2019

Если вы знаете номер ячейки, то я бы порекомендовал использовать метод getDateCellValue (). Вот пример того же, который работал для меня:System.out.println (дата);

0 голосов
/ 01 июня 2018

Вы можете использовать CellDateFormatter для получения даты в том же формате, что и в ячейке Excel.Смотрите следующий код:

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

    String df = cell.getCellStyle().getDataFormatString();

    strValue = new CellDateFormatter(df).format(date); 
}
0 голосов
/ 30 июня 2010

Вам нужны DateUtils: подробности см. в этой статье .

Или, что еще лучше, используйте JExcel Энди Хана вместо POI.

...