我正在使用 jasperreports 3.5.3 来生成一个大(但简单)的报告。只有一个带字符串的表。
当我列出足够大的选择时,生成的文件已损坏。 Excel 会提醒用户并且某些数据已损坏。但是,如果我过滤数据以显示一些行,包括正常生成的违规行。
有人对这个损坏的 excel 文件结果有经验吗?
提示: 它发生在 Linux/Apache+JBoss 服务器中,但相同的代码在本地 Windows/Jboss 上运行良好。我不认为中间的 Apache 有什么关系。它必须是世代本身的东西。
最佳答案
似乎 jasperreports 3.5.3 可以使用两种“excel writers”。默认导出器是 JRXlsExporter
并且不能很好地处理大文件(至少在我的 Spring MVC 项目中)。
解决方法是使用基于 JExcelAPI 的其他导出器。我可以毫不费力地导出数据。
为了使 jasperreport 使用 JExcelAPI 到 Spring MVC 安装 中,您必须编写一个个性化的类。它非常简单:
import net.sf.jasperreports.engine.JRExporter;
import net.sf.jasperreports.engine.export.JExcelApiExporter;
import org.springframework.web.servlet.view.jasperreports.AbstractJasperReportsSingleFormatView;
// this is the view class you'll use, instead of JasperReportsXlsView
public class JasperReportsJExcelApiView extends AbstractJasperReportsSingleFormatView
{
// copied from JasperReportsXlsView
public JasperReportsJExcelApiView()
{
setContentType("application/vnd.ms-excel");
}
protected JRExporter createExporter()
{
// we create the JExcelAPIExporter, not the JRXlsExporter
return new JExcelApiExporter();
}
// copied from JasperReportsXlsView (I think it says: write binary data, not text)
protected boolean useWriter()
{
return false;
}
}
您将需要 JExcelAPI 2.6 发行版的类路径中的 jxl.jar。
关于excel - 到 Excel 的大型 jasper 报告会导致文件损坏,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2282295/