首页 > 解决方案 > Apache POI Workbook 将奇怪的字符写入 OutputStream

问题描述

我正在使用 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 时我是否遗漏了什么?为什么会发生这种情况,而不是显示单元格中的值?

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

标签: javaexcelfile-ioapache-poi

解决方案


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

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


推荐阅读