使用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
。 让我们看看是否能解决这个问题。