【问题标题】:Writing xlsx file using POI使用 POI 编写 xlsx 文件
【发布时间】:2015-08-20 02:48:17
【问题描述】:

我有一个应用程序可以生成 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 的建议,我尝试在创建后将样式设置为每个单独的单元格。这行得通。谢谢雷格曼!

【问题讨论】:

  • 请显示应用 Excel 中未显示的单元格格式的代码。
  • 原帖添加格式代码。
  • 您使用的是什么版本的 Apache POI?如果它不是最新的,您是否尝试过升级?

标签: java excel apache-poi


【解决方案1】:

我不知道为什么 LibreOffice 会以完整的格式打开它,因为当您使用 setDefaultColumnStyle method 时,文档指出它仅将格式应用于您调用该方法后创建的单元格。

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

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

【讨论】:

  • 那个 createCell 是用于列标题单元格的。它下面的所有单元格都是在设置默认 col 样式后创建的。抱歉,我应该更清楚一点——这是列标签。
  • 您是否尝试过在创建每个数据单元格时将单元格样式直接应用到每个数据单元格,Cell#setCellStyle
  • @user3250532 你不觉得点赞是有必要的吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-19
相关资源
最近更新 更多