首页 > 解决方案 > 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());
}

我知道这个问题很模糊,但也许我处理这个流程的方式有些不正确,尽管在我尝试克隆模板的一些工作表之前一切正常。任何指针将不胜感激。先感谢您。

标签: javaexcelapache-poiminio

解决方案


推荐阅读