首页 文章

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

提问于
浏览
1

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

Apache POI在写文件时没有抱怨,它们可以打开,但是Excel 97错误显示它们:部分单元格的字体大小错误,而且多个字体颜色的单元格无法更改(改变它们的字体大小不会工作) .

此外,Excel 2010抱怨该文件不安全(从服务器下载时),并且Excel 97和Excel 2010经常崩溃导出的文件 .

该应用程序的先前版本使用JExcelApi并且未编写多格式文本单元格 . 服务器使用previos(JExcelApi驱动)版本的应用程序生成的文件在Office2010中正常显示,没有安全警告 .

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

此外,有没有人弄清楚为什么设置AutoFilters无法在指定的Office 2010中显示,但在Excel 97中正确显示(所以它有时会崩溃或工作直到选择一个AutoFilter?) .

最后,我尝试往返旧版本应用程序的Excel导出,并发现Apache POI将文件大小减少了> 35%,同时破坏了文件的内容 - 尽管没有应用任何更改(只是将文件读入HSSF工作簿并将其重写为ByteArrayOutputStream . 有没有人想出如何防止POI改变写入的文件?

谢谢,

迈克尔

2 回答

  • 0

    这里有很多问题,但听起来POI输出的记录是97误解 . 97'.xls和2003 .xls之间存在显着差异 . 对话行为异常通常是记录格式错误的症状 . Excel 2010有一个二进制文件验证器,它在任何二进制文件格式文件(BIFF)上内部运行 . 它将接收任何不符合BIFF规范的记录 .

    我不确定AutoFilters或改变行为是怎么回事 .

    如果您在使用POI时遇到很多麻烦,您可能希望查看OfficeWriter,它在2010年的验证和样式方面表现相当不错 .

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

  • 0

    我们问题的根本原因可以追溯到excel模板文件中引入的条件格式 . 这导致输出文件具有条件格式 .
    我们摆脱了条件格式,一切都很好!当用户尝试通过网络访问文件时,问题会非常严重 . 可以从excel中删除条件格式 . 确保从所有工作表/样式中删除条件格式 .

相关问题