форматирование дат с использованием apache poi при передаче строкового объекта

Мне нужно отформатировать ячейку даты в excel так, чтобы она была дд/мм/гггг

Я понимаю, что это, возможно, неправильный стандарт, но это то, что хочет клиент...

Дата, которую я передаю в ячейку, имеет формат гггг-мм-дд.

So,

У меня есть этот код:

Cell dateCell;
dateCell = row.createCell(3);
dateCell.setCellValue(p.getDateOfBirth());
CellStyle dateCellStyle = WorkBook.createCellStyle();
dateCellStyle.setDataFormat(creationHelper.createDataFormat().getFormat("dd/mm/yyyy"));
dateCell.setCellStyle(dateCellStyle);

что в соответствии с этим: http://www.kscodes.com/java/writing-various-date-formats-in-excel-using-poi/ (1)

Я считаю, должно работать. Но когда я создаю файл excel, дата по-прежнему yyyy-mm-dd

Я посмотрел здесь Как установить дату поле в excel с использованием библиотеки java apache poi? и я заметил, что здесь используется строка

cell.setCellType(CellType.NUMERIC);

но в (1) об этом не упоминается

Кто-нибудь понял, что я делаю неправильно?


person 3rdRockSoftware    schedule 17.11.2020    source источник
comment
Посмотрите это. Соответствует ли это вашим потребностям?   -  person marcin.programuje    schedule 17.11.2020
comment
Спасибо марчин. Я думаю, что это возможно, но мой код использует XSSFWorkbook, а упомянутый код использует HSSFCell и т. д. Знаете ли вы, совместимы ли они. Я считаю, что разница в том, что один создает файл excel.xls, а другой - файл excel.xlsx.   -  person 3rdRockSoftware    schedule 17.11.2020


Ответы (1)


Дата, которую я передаю в ячейку, имеет формат гггг-мм-дд.

Это основная причина проблемы. API ожидает, что вы передадите объект Date, в то время как вы передаете объект String. Вам нужно преобразовать строку даты в объект Date и передать его в dateCell.setCellValue, как показано ниже:

Cell dateCell;
dateCell = row.createCell(3);
Date dateOfBirth = new SimpleDateFormat("yyyy-MM-dd").parse(p.getDateOfBirth() + "");
dateCell.setCellValue(dateOfBirth);
CellStyle dateCellStyle = WorkBook.createCellStyle();
dateCellStyle.setDataFormat(creationHelper.createDataFormat().getFormat("dd/mm/yyyy"));
dateCell.setCellStyle(dateCellStyle);
person Arvind Kumar Avinash    schedule 17.11.2020
comment
Спасибо за вашу помощь, сэр. Это сработало отлично, хотя я использовал LocalDate вместо simpleDateFormat. Я уверен, что где-то читал, что simpleDateFormat скоро устареет. В любом случае, вы помогли мне увидеть лес за деревьями. - person 3rdRockSoftware; 18.11.2020