Java Jasper报告导出到xls版本5.6

Java Jasper报告导出到xls版本5.6,java,jasper-reports,Java,Jasper Reports,运行代码后,它在else块中对PDF工作正常。。。然而,xls完全崩溃了。堆栈跟踪我试图找出问题所在,结果一无所获 Exporter exporter = null; ... ... ... omitted various: template compile, load, etc, and case statement, to switch to correct exporter case

运行代码后,它在else块中对PDF工作正常。。。然而,xls完全崩溃了。堆栈跟踪我试图找出问题所在,结果一无所获

        Exporter exporter = null;            
        ...
        ...
        ... omitted various: template compile, load, etc, and case statement, to switch to correct exporter

         case "xls":
                exporter = new JRXlsExporter();
                break;

        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        bos = new BufferedOutputStream(baos);

        if (reportType.equals("xls"))
        {
            exporter.setExporterInput(new SimpleExporterInput(jprint));
            exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(baos));
            SimpleXlsReportConfiguration configuration = new SimpleXlsReportConfiguration();
            configuration.setOnePagePerSheet(false);
            configuration.setDetectCellType(true);
            configuration.setCollapseRowSpan(false);
            configuration.setWhitePageBackground(false);
            configuration.setRemoveEmptySpaceBetweenRows(true);
            exporter.setConfiguration(configuration);
        }
        else
        {
            exporter.setExporterInput(new SimpleExporterInput(jprint));
            exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(baos));
        }
        exporter.exportReport();
尝试使用XLS时,堆栈跟踪如下

Caused by: java.lang.reflect.UndeclaredThrowableException
at com.sun.proxy.$Proxy18.isForceLineBreakPolicy(Unknown Source)
at net.sf.jasperreports.engine.export.JRPdfExporter.initReport(JRPdfExporter.java:547)
at net.sf.jasperreports.engine.JRAbstractExporter.setCurrentExporterInputItem(JRAbstractExporter.java:567)
at net.sf.jasperreports.engine.export.JRPdfExporter.exportReportToStream(JRPdfExporter.java:735)
at net.sf.jasperreports.engine.export.JRPdfExporter.exportReport(JRPdfExporter.java:513)
at com.com.com.reporting.ReportManager.generateReport(ReportManager.java:120)
... 6 more
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at net.sf.jasperreports.export.CompositeExporterConfigurationFactory$DelegateInvocationHandler.invoke(CompositeExporterConfigurationFactory.java:159)
... 12 more
Caused by: java.lang.IllegalArgumentException: object is not an instance of declaring class
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at net.sf.jasperreports.export.CompositeExporterConfigurationFactory$DelegateInvocationHandler.invoke(CompositeExporterConfigurationFactory.java:159)
at com.sun.proxy.$Proxy18.isForceLineBreakPolicy(Unknown Source)
... 17 more

输出的文件完全是胡说八道,但是,将扩展名从“.xls”更改为“.pdf”与pdf一样好。我现在不确定的是,有些地方出了很大的问题。

您能否确认ommited代码是正确的,并且您确实有JRXlsExporter的实例?如果JRPdfExporter提供了SimpleXlsReportConfiguration,我希望stacktrace是这样的。

好的。。。因此,结果是使用:

Exporter exporter = null;   
exporter = new JRXlsExporter();  
如果不使用父类来调用每个不同的报告类型,那么这是行不通的,您必须显式地使用每个单独的类型。除此之外,我不需要做任何改变

(显然,对于我的原始问题中省略的其他正在使用的报告):


在我的例子中,我升级了POI,因此它破坏了动态报告 所以解决办法是降低POI的等级,因为我找不到合适的 与动态报告兼容的it版本。我也有两个选择 降级poi或升级动态报告我选择降级poi


您使用的是jdk 1.7吗?是的,1.7中的最新版本是正确的。唯一需要注意的是各种类型的switch语句,即
case“csv”:exporter=new JRCsvExporter();打破案例“xls”:exporter=new JRXlsExporter();中断。。。感谢你的帮助,我已经用我的方法回答了。
JRXlsxExporter jrXlsxExporter = new JRXlsxExporter();