formatar datas usando apache poi ao passar um objeto string

Nov 17 2020

Preciso formatar uma célula de data no excel para ser dd / mm / aaaa

Agradeço que talvez não seja o padrão "correto", mas é isso que o cliente deseja ...

A data que estou passando para a célula está formatada em aaaa-mm-dd

Assim,

Eu tenho este código:

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);

que de acordo com isto: http://www.kscodes.com/java/writing-various-date-formats-in-excel-using-poi/ (1)

Eu acredito que deve funcionar. Mas quando eu crio o arquivo excel, a data ainda é aaaa-mm-dd

Eu olhei aqui como definir o campo de data no Excel usando a biblioteca Java Apache Poi? e eu noto que isso usa a linha

cell.setCellType(CellType.NUMERIC);

mas não há menção disso em (1)

Alguém tem ideia do que estou fazendo de errado?

Respostas

2 LiveandLetLive Nov 18 2020 at 01:47

A data que estou passando para a célula está formatada em aaaa-mm-dd

Essa é a causa raiz do problema. A API espera que você passe um Dateobjeto enquanto você está passando um Stringobjeto. Você precisa analisar sua string de data em um Dateobjeto e passar o mesmo para dateCell.setCellValuecomo mostrado abaixo:

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);