Как читать ячейку Excel, имеющую дату с Apache POI?
Я использую 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();
}
как я могу исправить свою проблему?
4 ответов
если вы знаете, какая ячейка, т. е. позиция столбца, скажем, 0 в каждой строке будет датой, вы можете пойти на
row.getCell(0).getDateCellValue()
directly.
http://poi.apache.org/apidocs/org/apache/poi/hssf/usermodel/HSSFCell.html#getDateCellValue()
UPDATE: вот пример - вы можете применить это в коде случая коммутатора выше. Я проверяю и печатаю числовое, а также значение даты. В этом случае первый столбец в моем листе имеет даты, поэтому я использую ряд.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
Да, я понял вашу проблему. Если трудно определить ячейка имеет числовое или значение данных.
Если вы хотите данные в формате, который отображается в 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
вам нужны DateUtils: см. в этой статье для сведения.
или, еще лучше, используйте JExcel Энди Хана вместо POI.
вы можете использовать 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);
}