У меня проблема с тем, что 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();
}
}
Как только вы откроете файл spreadsheet_poi.xlsm в Excel, вы получите сообщение об ошибке, подобное следующему
"Мы обнаружили проблему с некоторым контентом в 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 «портить» файл?