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

Excel崩溃并错误显示使用Apache POI(Excel 87-2003.XLS格式)编写的文件,excel,export,string-formatting,apache-poi,autofilter,Excel,Export,String Formatting,Apache Poi,Autofilter,我们的JavaEE应用程序使用ApachePOI编写大型(>3000行,>300列)Excel文件。我们已经实现了客户的要求,即写入文件中的许多(>500)单元格具有部分文本格式,即一个单元格中的文本部分为红色和粗体,部分为黑色 Apache POI在写入文件时不会抱怨,并且可以打开这些文件,但Excel 97会错误显示这些文件:部分单元格的字体大小错误,具有多种字体颜色的单元格无法更改(更改其字体大小无效) 此外,Excel 2010抱怨文件不安全(从服务器下载时),Excel 97和Exce

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

Apache POI在写入文件时不会抱怨,并且可以打开这些文件,但Excel 97会错误显示这些文件:部分单元格的字体大小错误,具有多种字体颜色的单元格无法更改(更改其字体大小无效)

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

该应用程序的早期版本使用了JExcelApi,没有编写多格式文本单元格。服务器使用previos(JExcelApi供电)版本的应用程序生成的文件在Office2010中正常显示,没有安全警告

有人遇到过这些问题吗?如果有,我如何解决它们

另外,是否有人知道为什么设置自动筛选无法在Office 2010中以指定的格式显示,但却正确显示在Excel 97中(因此它有时会崩溃或仅在选择一个自动筛选之前工作?)

最后,我尝试往返于旧版本应用程序的Excel导出,发现ApachePOI将文件大小减少了35%以上,同时破坏了文件内容——尽管没有应用任何更改(只需将文件读入HSSF工作簿并将其重新写入ByteArrayOutputStream。是否有人知道如何防止POI更改已写入的文件

谢谢


Michael

这里有很多问题,但听起来好像POI输出的是97被误解的记录。97.xls和2003.xls之间有很大的区别。对话框行为异常通常是记录格式错误的症状。Excel 2010有一个二进制文件验证程序,它在任何二进制文件的内部运行文件格式文件(BIFF)。它将拾取任何不符合BIFF规范的记录

我不确定自动过滤器或改变行为是怎么回事

如果您在POI方面遇到很多问题,您可能希望检查一下2010验证和样式的总体效果


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

问题的根本原因是excel模板文件中引入的条件格式。这导致输出文件具有条件格式。
我们去掉了条件格式,现在一切都好了! 当用户试图通过网络访问这些文件时,这个问题表现得非常严重。 可以从excel中删除条件格式。
请确保同时从所有工作表/样式中删除条件格式。

文件中是否有文本框或其他对象?Excel 97-2003的列数限制为256列。如果您试图编写一个列数超过此数的文件,这可能是您问题的一部分。@datatoo:既没有文本框,也没有图像、注释或公式.@Jesse:即使我们写的列少于200列,也会出现上述问题。您正在为格式创建多少样式?Excel中的样式数量有限,因此您需要重新使用它们,而不是每个单元格创建一个样式。谢谢Nick,也许您可以帮我解决一个潜在的问题:我们如何正确编写lineb“破解Excel 97文件的单元格?”\n“来自Java(标准换行符)的?”\n“确实显示正确,但可能它仍然是一个隐藏的问题制造者?很抱歉,错过了您的问题。请尝试\r\n。POI应该能够正确地写出字符串记录-它们几乎只是Unicode.97和2003.xls,不太挑剔,但2010验证器确实如此。”。