使用POI编写xlsx文件

时间:2014-02-04 17:05:53

标签: java excel apache-poi

我有一个生成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!

1 个答案:

答案 0 :(得分:1)

我不确定为什么LibreOffice会在格式完整的情况下打开它,因为当您使用setDefaultColumnStyle method时,文档声明它只将格式应用于调用该方法后创建的单元格。

  

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

在创建单元格之前尝试拨打setDefaultColumnStyle。让我们看看是否能解决问题。