Чтение значений даты из ячейки excel с использованием API POI HSSF
Я использую API POI HSSF для моих excel-манипуляций в Java. У меня есть значение даты "8/1/2009" в одной из моих excel-ячеек, и пока я пытаюсь прочитать это значение с использованием API HSSF, он обнаруживает тип ячейки как числовой и возвращает значение "Двойное" моей даты. См. Пример кода ниже:
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!?
Ответы
Ответ 1
Вы можете взглянуть на:
HSSFDateUtil.isCellDateFormatted()
Подробнее о HSSFDateUtil см. в API-интерфейсе форматов файлов с привилегией POI:
http://poi.apache.org/apidocs/org/apache/poi/hssf/usermodel/HSSFDateUtil.html
Это также предоставляет некоторые вспомогательные методы для возврата Excel getExcelDate()
и дат Java getJavaDate()
. Вы должны быть несколько осторожны в разных форматах даты, хотя...
Ответ 2
Если вы хотите ссылаться на дату в том же формате, что и в файле 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
}
Ответ 3
Excel обрабатывает даты и время как цифры... Джон сказал это лучше, поэтому я не буду его повторять здесь...
Однако пример кода для того, что вы поставили в вопросе, находится в http://poi.apache.org/spreadsheet/quick-guide.html#CellContents
Ответ 4
Если вы используете POI 3.5, вы можете использовать следующие
cell.getDateCellValue(). Это будет работать и для Excel 2007.
Ответ 5
Так как POI 3.15 beta3 некоторые функции 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());
}