我正在使用 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/

10-16 08:04