12

我面对org.apache.poi.openxml4j.exceptions.OpenXML4JRuntimeException: Fail to save:an error occurs while saving the package : The part /docProps/app.xml fail to be saved in the stream with marshaller <br/> org.apache.poi.openxml4j.opc.internal.marshallers.DefaultMarshaller@7c81475b

在每个测试场景执行完成后尝试将每个测试场景结果(PASS 或 FAIL)写入 Excel 表(.xlsx)时出现异常。为此,我编写了以下两个不同的模块。

请告诉我问题出在哪里以及如何解决它..

//Method for writing results into Report
 public void putResultstoReport(String values[])
 {
      int j=NoofTimesExecuted;
      NoofTimesExecuted++;
      XSSFRow row = sheet.createRow(j);
      for(int i=0;i<values.length;i++)
      {
           XSSFCell cell = row.createCell(i);
           cell.setCellValue(values[i]);
      }
      try {
           System.out.println("Times:"+NoofTimesExecuted);
           wb.write(fileOut);
      }
      //fileOut.flush();
      //fileOut.close();
      }
      catch(Exception e) {
           System.out.println("Exception at closing opened Report :"+e);
      }

//Method for Creating the Excelt Report
 public void createReport()
 {
      String FileLocation = getProperty("WorkSpace")+"//SCH_Registration//OutPut//TestResults.xlsx";
      try {
           fileOut = new FileOutputStream(FileLocation);
           String sheetName = "TestResults"; //name of sheet
           wb = new XSSFWorkbook();
           sheet = wb.createSheet(sheetName);
           fileOut.flush();
           fileOut.close();
      }
      catch(Exception e)
      {
           System.out.println("Exception at Create Report file:"+e);
      }
}
4

6 回答 6

5

我今天遇到了这个问题并且已经解决了。

问题出在putResultstoReport()

你不能wb.write(fileOut);在你的周期。

解析度:

putResultstoReport();然后先打电话wb.write(fileOut);

于 2014-01-24T02:15:14.363 回答
5

我也有这个错误。

我发现我的错误是因为我多次打开同一个文件/工作簿。

因此,我建议您在尝试关闭之前确保只打开一次。

于 2016-01-25T15:05:16.283 回答
5

如果发生超时,可能会发生这种情况。我有适用于小型数据集的代码,并在大型数据集上引发此错误。

于 2019-05-13T15:12:55.433 回答
0

我有类似的问题。最后我得到了原因,那就是下面的 jar 文件的版本被覆盖了。

  org.apache.xmlgraphics:batik-dom

因此,我添加了以下依赖项,现在它工作正常。

<dependency>
    <groupId>org.apache.xmlgraphics</groupId>
    <artifactId>batik-dom</artifactId>
    <version>1.8</version>
</dependency>

这个 jar 包含对xalan. 需要生成报告xalan

于 2017-12-01T12:04:04.117 回答
0

我遇到过同样的问题。当我缩短输出 excel 文件名时,它停止了。

于 2020-01-20T13:37:20.960 回答
0

我有同样的问题,用户刷新页面并在前一个请求完成之前再次发送请求。创建名称时,在名称中使用毫秒以避免与名称创建代码中的这些更新发生名称冲突解决了上述问题。

       String sheetName="projectName"+System.currentTimeMillis() + ".xlsx"
       FileOutputStream fileOut = new FileOutputStream(sheetName);
       workbook.write(fileOut);
       fileOut.close();
于 2020-08-11T16:08:22.873 回答