java - 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 时我是否遗漏了什么?为什么会发生这种情况,而不是显示单元格中的值?
任何帮助或想法将不胜感激。
解决方案
Excel 电子表格不以文本格式保存,因此当您尝试在调试器中将其作为文本查看时,它看起来就是这样。
它实际上是一个包含 XML 文件的 .zip 存档。如果您保存它并将扩展名更改为.zip
,那么您将能够在 Windows 资源管理器中或使用 zip 命令查看内容。
推荐阅读
- findbugs - SpotBugs:自定义检测器
- java - 如何使用共享首选项保存评分?
- python - 将列表项转换为小写
- spring - Spring Boot 应用程序不接受传入 POST 请求的 ID
- mysql - MySQL/MariaDB:REGEX_REPLACE 和唯一键
- go - 将 WaitGroup 传递给函数会改变行为,为什么?
- android - 我正在尝试使用 Android NumberPicker 小部件,但我不知道如何从 NumberPicker 设置值
- r - 为不同的数据集估计单独的回归并按组生成预测
- json - 试图从python中的Json响应中平均目录中的数字
- reactjs - 下一个js如何在客户端渲染之前获取localStorage数据