java - Apache POI 克隆表损坏了 excel 文件
问题描述
我有一个从 minIO 检索的 excel 模板文件,我在这个 excel 上执行了一些写入操作,最后我将修改后的文件返回给调用我的代码的用户。在我尝试克隆我的 Excel 表格之一之前,此流程运行良好。当我这样做并尝试使用 Excel 打开它时,文件看起来已损坏,Excel 无法打开它。我有点迷茫,我不确定是什么导致了这种行为。我试图克隆一个我为测试创建的空工作表并且它正在工作,所以它可能与我试图克隆的工作表的内容有关,但我不知道代码中的一切运行良好。
因此,这些是我认为相关的部分(从 minIO 获取文件,克隆工作表的那一刻以及最后写入 ByteArray 的那一刻)
try (InputStream inputStream = minioClient.getObject(
GetObjectArgs.builder()
.bucket("someBucket")
.object("someObject.xlsx")
.build()
)) {
Workbook workbook = new XSSFWorkbook(inputStream);
...
Sheet newSheet = workbook.cloneSheet(workbook.getSheetIndex(sheetTemplate));
workbook.setSheetName(workbook.getSheetIndex(newSheet.getSheetName()), "newName");
workbook.setSheetOrder("newName", workbook.getSheetIndex(sheetTemplate));
newSheet.getRow(10).getCell(2).setCellValue("someValue");
...
ByteArrayOutputStream bos = new ByteArrayOutputStream();
workbook.write(bos);
workbook.close();
return Optional.of(bos.toByteArray());
}
我知道这个问题很模糊,但也许我处理这个流程的方式有些不正确,尽管在我尝试克隆模板的一些工作表之前一切正常。任何指针将不胜感激。先感谢您。
解决方案
推荐阅读
- enterprise-architect - EA项目浏览器中元素的自定义标记
- javascript - 如何从xml显示特定节点?
- react-native - navigation.navigate 在本机反应中不起作用
- python - 在字段名称之后搜索自定义字段
- python - 在 python 构造函数中缺少 1 个必需的位置参数
- html - 在 asp.net 的转发器数据源控件中,服务器标记的格式不正确
- angular - 断开连接后 Strophe.js 未重新连接
- vue.js - VueJs:如何将当前的迭代项传递给对话框?
- spring-boot - 如何访问 th:objects 列表并使用 th:each 遍历它?
- linkedin - LinkedIn API:获取当前速率限制