我面对
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
在每个测试场景执行完成后尝试将每个测试场景结果(通过或失败)写入 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);
}
}
我也有这个错误。
我发现我的错误是因为我多次打开同一个文件/工作簿而引起的。
因此,我建议您在尝试关闭之前确保只打开一次。
我今天遇到了这个问题并且已经解决了。
问题出在
putResultstoReport()
您不能在您的周期中
wb.write(fileOut);
。
分辨率:
先打电话
putResultstoReport();
,然后wb.write(fileOut);
如果发生超时,就会发生这种情况。我有适用于小数据集的代码,但在处理大数据集时会抛出此错误。
我也有同样的问题。 当我缩短输出Excel文件名时,它就停止了。
我有类似的问题。 最后我找到了原因,那就是下面的 jar 文件的版本被覆盖了。
org.apache.xmlgraphics:batik-dom
因此,我添加了以下依赖项,现在它工作正常。
<dependency>
<groupId>org.apache.xmlgraphics</groupId>
<artifactId>batik-dom</artifactId>
<version>1.8</version>
</dependency>
此 jar 包含
xalan
的依赖项。
要生成报告,需要xalan
。
我遇到了同样的问题,用户刷新页面并在上一个请求完成之前再次发送请求。 创建名称时,在名称中使用毫秒以避免名称与名称创建代码中的这些更新发生冲突,解决了上述问题。
String sheetName="projectName"+System.currentTimeMillis() + ".xlsx"
FileOutputStream fileOut = new FileOutputStream(sheetName);
workbook.write(fileOut);
fileOut.close();
问题是由于没有为OutputStream提供第二个参数,该参数应该是append。 FileOutputStream的构造函数是:
public FileOutputStream(File file, boolean append)
在此处为附加参数提供“true”将解决该问题。因为当append不设置为true时,输出流会覆盖文件的内容。