我有一个问题,就是Apache POI仅通过读写即可“破坏” xlsm / xlsx文件(例如,使用以下代码)
public class Snippet {
public static void main(String[] args) throws Exception {
String str1 = "c:/tmp/spreadsheet.xlsm";
String str2 = "c:/tmp/spreadsheet_poi.xlsm";
// open file
XSSFWorkbook wb = new XSSFWorkbook(new FileInputStream(new File(str1)));
// save file
FileOutputStream out = new FileOutputStream(str2);
wb.write(out);
wb.close();
out.close();
}
}
一旦在Excel中打开sheetsheet_poi.xlsm,就会收到类似以下的错误
“我们发现xxx中的某些内容存在问题。您是否要我们尽我们最大努力来恢复……”?
如果您说“是”,您将得到一条看起来像这样的日志:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<recoveryLog xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main">
<logFileName>error145040_01.xml</logFileName>
<summary>Errors were detected in file 'C:\tmp\spreadsheet_poi.xlsm'</summary>
<repairedParts>
<repairedPart>Repaired Part: /xl/worksheets/sheet4.xml part with XML error. Load error. Line 2, column 0.</repairedPart>
<repairedPart>Repaired Part: /xl/worksheets/sheet5.xml part with XML error. Load error. Line 2, column 0.</repairedPart>
<repairedPart>Repaired Part: /xl/worksheets/sheet8.xml part with XML error. Load error. Line 2, column 0.</repairedPart>
</repairedParts>
</recoveryLog>
更详细地调试问题的最佳方法是什么(例如,找出使poi“破坏”文件的原因是什么?
答案 0 :(得分:1)
最终,我发现调试这件事的最佳方法是两件事
在我的情况下,问题是poi某种程度上将尺寸设置从更改为
<dimension ref="A1:XFD147"/>
到
<dimension ref="A1:XFE147"/>
(XFE蜂鸣不存在的列)。我通过删除原始xlsx文件中的许多空列来修复它。
答案 1 :(得分:1)
我的教授说:“数学家如何在沙漠中找到狮子? -“首先将沙漠切成两半,找出狮子在哪里,然后重复直到狮子被抓住。”
因此,尝试从Excel文件中删除功能,尝试其他版本,直到找到根本原因。不过,可能有多种原因。