Excel崩溃并错误地显示使用Apache POI编写的文件(Excel 87-2003 .XLS格式)

我们的Java EE应用程序使用Apache POI编写大型(> 3000行,> 300列)Excel文件。 我们已经实现了客户要求书写文件中的许多(> 500个)单元格具有部分文本格式,即一个单元格中的文本部分是红色和粗体,部分是黑色的。

编写这些文件时,Apache POI没有抱怨,而且可以打开它们,但Excel 97错误地显示了它们:部分单元格的字体大小错误,并且不能更改具有多种字体颜色的单元格(更改它们的字体大小工作)。

此外,Excel 2010会抱怨文件不安全(从服务器下载时),并且Excel 97和Excel 2010会频繁导出导出的文件。

该应用程序的以前版本使用JExcelApi,并没有写入多格式文本单元格。 服务器使用应用程序(JExcelApi-powered)版本生成的文件在Office2010中正常显示,没有安全警告。

有没有人遇到这些问题,如果是的话,我该如何解决这些问题?

另外,有没有人找出为什么设置自动filter无法在指定的Office 2010中显示,但在Excel 97中正确显示(所以它有时会崩溃或只是直到一个AutoFilter被选中?)。

最后,我尝试了对旧版应用程序的Excel导出进行返回,发现Apache POI将文件大小减less了大于35%,同时打破了文件的内容 – 虽然没有应用更改(只是将文件读入HSSF工作簿并将其重新写入ByteArrayOutputStream有没有人知道如何防止POI改变书面文件?

谢谢,

迈克尔

这里有很多问题,但是听起来POI正在输出97曲解的logging。 97'.xls和2003 .xls之间有显着差异。 performance奇怪的对话往往是格式错误的logging的症状。 Excel 2010有一个二进制文件validation程序,它可以在任何二进制文件格式文件(BIFF)上内部运行。 它将采集任何不符合BIFF规范的logging。

我不确定自动filter或改变行为发生了什么。

如果您在POI方面遇到很多麻烦,您可能希望查看OfficeWriter ,它在2010年的validation和样式方面做得相当不错。

免责声明:我是编写最新版本的工程师之一。

我们的问题的根本原因追溯到Excel模板文件中引入的条件格式。 这导致输出文件具有条件格式。
我们摆脱了条件格式,一切都很好! 当用户试图通过networking访问这些文件时,问题就显得非常严重。 条件格式可以从Excel中删除。 确保从所有图纸/样式中删除条件格式。