получить дату из таблицы Excel, используя POI - PullRequest
0 голосов
/ 01 апреля 2011

Я получил дату из таблицы Excel, используя POI, используя приведенный ниже код,

if (DateUtil.isCellDateFormatted(currentCell))
                {
                    Date date = currentCell.getDateCellValue();
                    cellValue = date.getDate() + "/" + (date.getMonth() + 1) + "/" + (1900 + date.getYear());
}

По умолчанию формат даты таблицы Excel - ММ / дд / гг. Но если я сделаю значение месяца больше 12 (т.е.> = 13), формат изменится на dd / MM / yy.

По приведенному выше коду: если я задаю дату как 10/11/2010, это дает месяц как 10 и дату как 11. Если я даю это как 15/10/2010, я получаю месяц как 10 и дату как 15.

Но мне нужно сохранить один формат: дд / мм / гггг. Как мне этого добиться?

Ответы [ 3 ]

11 голосов
/ 01 апреля 2011

Используйте SimpleDateFormat для форматирования даты, поскольку "currentCell.getDateCellValue ()) возвращает дату.

if (DateUtil.isCellDateFormatted(currentCell))
{
   try {

    SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
    cellValue =  = sdf.format(currentCell.getDateCellValue());

    } catch (ParseException e) {
            e.printStackTrace();
    }
}

Это должно предотвратить происходящее автоматическое преобразование.

3 голосов
/ 01 апреля 2011

Возможно, вы можете попробовать использовать org.apache.poi.ss.usermodel.DataFormatter - при условии, что вы настроите файл Excel для форматирования ячейки даты как dd / mm / yyyy, тогда он сможет ее отрендерить для ты из клетки.

// Get a date formatter, and ensure it does dd/mm/yyyy format
DataFormatter formatter = new DataFormatter(Locale.UK);

// Find date cells
for(Row r : sheet) {
  for(Cell c: r) {
     if(DateUtil.isCellDateFormatted(c)) {
        String date = DataFormatter.formatCellValue(c);
        // date should be the same as shown in Excel
     }
  }
}

С другой стороны, если ваша ячейка отформатирована как дата, но в другом формате, у вас есть два варианта. Один из них - изменить стиль ячейки на формат dd / mm / yyyy, а затем попросить DataFormatter отформатировать его, другой - получить объект java.util.Date из DateUtil, а затем отформатировать его в формате SimpleDateFormat, как предлагали другие .

0 голосов
/ 01 апреля 2011

Убедитесь, что поле в самом Excel сконфигурировано как тип данных DATE в Excel. Тогда фактический формат в Excel не должен зависеть от того, как POI читает его.

...