Java Jasper报告导出到xls版本5.6
运行代码后,它在else块中对PDF工作正常。。。然而,xls完全崩溃了。堆栈跟踪我试图找出问题所在,结果一无所获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
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();