使用POI编写xlsx文件

我有一个应用程序,生成一个XSSFWorkbook并填充预算数据。 当它完成它写出一个文件:

try { FileOutputStream fileOut = new FileOutputStream("/path/to/my/file/myfilename.xlsx"); wb.write(fileOut); fileOut.close(); } catch (IOException ioe) { logger.error("Error writing spreadsheet", ioe); } 

到现在为止还挺好。 我正在一个Linux机器上工作,但输出是针对Windows机器上的人的,所以它必须是一个xlsx。 工作簿按预期生成,当我在LibreOffice中打开它时,它看起来和我所期望的完全一样。 然后我把它发给我的同事,当他们在Excel中打开它时,大部分的单元格格式都不见了。 货币格式的单元格只是原始数字。 格式化为百分比的单元格(大多数)只是原始数字。

任何想法我可能做错了什么? 谢谢!

其中一种单元格样式:

 XSSFCellStyle percent = wb.createCellStyle(); percent.setDataFormat(wb.createDataFormat().getFormat("0.0%")); 

后来用在这里:

 header.createCell(cn).setCellValue("%"); sheet.setDefaultColumnStyle(cn, percent); 

有一堆这些,但我怀疑我做错了一个是与他们所有人的同样的问题,所以我只是提出一个,而不是200行他们。 ;)

更新 :在rgettman的build议,我尝试创build后,设置每个单元格的样式。 这工作。 感谢rgettman!

我不知道为什么LibreOffice会打开格式不变,因为当您使用setDefaultColumnStyle方法时 ,文档指出,它只适用于您调用该方法后创build的单元格的格式。

POI将仅将此样式应用于添加到工作表的新单元格。

尝试在创build单元之前调用setDefaultColumnStyle 。 让我们看看是否能解决这个问题。