Подтвердить что ты не робот

Чтение значений даты из ячейки 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!?

4b9b3361

Ответ 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());
}