Apache POI Workbook 将奇怪的字符写入 OutputStream

Apache POI Workbook writes strange characters to 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 时是否遗漏了什么?为什么会发生这种情况,而不是在单元格中显示值?

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

Excel 电子表格未以文本格式保存,因此当您尝试在调试器中以文本格式查看它时,它就是这个样子。

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