【问题标题】:Apache POI Workbook writes strange characters to OutputStreamApache POI Workbook 将奇怪的字符写入 OutputStream
【发布时间】:2020-01-08 13:49:54
【问题描述】:

我正在使用 Apache POI 从 Spring 应用程序写入 Excel 文件(按照本教程:https://www.roytuts.com/generic-way-of-writing-data-in-excel-using-apache-poi/。我的函数主体几乎相同。)

我的方法采用要写入的输出流、要导出的对象列表和列名列表。

public void writeToExcel(OutputStream outputStream, List<T> exportObjects, List<String> columns) throws NoSuchMethodException {
   ...
   workbook.write(outputStream);
   outputStream.flush();
 }

然后我像这样调用方法:

  OutputStream outputStream = new ByteArrayOutputStream();
  importExportService.writeToExcel(outputStream, objects, header);

在调试时,我可以看到正确的值被传递给了单元格。 但是当我通过 workbook.write(outputStream) 的那一刻,outputStream 得到了这个值:

PK |b|b|b s(P               _rels/.rels���j�0�_���8�`�Q��2�m��4[ILb��ږ���.[K
�($}��v?�I�Q.���uӂ�h���x>=��@��p�H"�~�}�   �n����*"�H�׺؁�����8�Z�^'�#�
and so on

所以,我的问题是,我在写入 OutputStream 时是否遗漏了什么?为什么会发生这种情况,而不是在单元格中显示值?

任何帮助或想法将不胜感激。

【问题讨论】:

  • workbook.writeExcel 工作簿文件的字节写入OutputStream。在您的情况下,这是 *.xlsx 文件的字节,这是一个 ZIP 存档,其中包含工作簿内容作为特殊目录结构中的多个单独的 XML 文件。因此字节以魔术字节50 4B (PK) 开头。
  • 这是有道理的,@AxelRichter。谢谢。

标签: java excel file-io apache-poi


【解决方案1】:

Excel 电子表格不是以文本格式保存的,因此当您尝试在调试器中将其作为文本查看时,它看起来就是这样。

它实际上是一个包含 XML 文件的 .zip 存档。如果您保存它并将扩展名更改为.zip,那么您将能够在 Windows 资源管理器中或使用 zip 命令查看内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-21
    • 2019-06-14
    • 2016-01-23
    • 1970-01-01
    • 1970-01-01
    • 2012-09-01
    • 2012-06-11
    相关资源
    最近更新 更多