【发布时间】: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.write将Excel工作簿文件的字节写入OutputStream。在您的情况下,这是*.xlsx文件的字节,这是一个ZIP存档,其中包含工作簿内容作为特殊目录结构中的多个单独的XML文件。因此字节以魔术字节50 4B(PK) 开头。 -
这是有道理的,@AxelRichter。谢谢。
标签: java excel file-io apache-poi