我有一个生成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的建议中,我尝试在创建后为每个单独的单元格设置样式。这有效。谢谢rgettman!
答案 0 :(得分:1)
我不确定为什么LibreOffice会在格式完整的情况下打开它,因为当您使用setDefaultColumnStyle
method时,文档声明它只将格式应用于调用该方法后创建的单元格。
POI仅将此样式应用于添加到工作表中的新单元格。
在创建单元格之前尝试拨打setDefaultColumnStyle
。让我们看看是否能解决问题。