2013-11-22 63 views
5

我有一些麻煩導出我的報告爲XLS。以PDF格式導出效果很好。java.lang.NoSuchMethodError:org.apache.poi.hssf.usermodel.HSSFWorkbook.createDataFormat()Lorg/apache/poi/hssf/usermodel/HSSFDataFormat;

於是,我就更新到最新的JasperReports的的Apache POI版本:

  • 的JasperReports:5.5.0
  • POI:3.7
  • iText的:2.1.7

但我總是收到以下異常:

java.lang.NoSuchMethodError: org.apache.poi.hssf.usermodel.HSSFWorkbook.createDataFormat()Lorg/apache/poi/hssf/usermodel/HSSFDataFormat; 
    net.sf.jasperreports.engine.export.JRXlsExporter.openWorkbook(JRXlsExporter.java:284) 
    net.sf.jasperreports.engine.export.JRXlsAbstractExporter.exportReportToStream(JRXlsAbstractExporter.java:927) 
    net.sf.jasperreports.engine.export.JRXlsAbstractExporter.exportReport(JRXlsAbstractExporter.java:697) 
    com.phoenix.customermonitor.print.GenericDataSourceApp.xls(GenericDataSourceApp.java:290) 
    com.phoenix.customermonitor.print.GenericDataSourceApp.exportToFormat(GenericDataSourceApp.java:335) 
    com.phoenix.core.JasperReportHandlerAction.exportOrderMonitorOverview(JasperReportHandlerAction.java:242) 
    com.phoenix.customermonitor.action.OrderMonitorMainAction.execute(OrderMonitorMainAction.java:217) 
    org.apache.struts.chain.commands.servlet.ExecuteAction.execute(ExecuteAction.java:58) 
    org.apache.struts.chain.commands.AbstractExecuteAction.execute(AbstractExecuteAction.java:67) 
    org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:51) 
    org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190) 
    org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:304) 
    org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190) 
    org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:283) 
    org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913) 
    org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:462) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:643) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:723) 

企業代碼

File sourceFile = new File(fileIn); 

JasperPrint jasperPrint = (JasperPrint)JRLoader.loadObject(sourceFile); 

String name = fileIn.substring(fileIn.lastIndexOf(System.getProperty("file.separator"))+1); 
name = name.substring(0, name.lastIndexOf(".")); 
File destFile = new File(fileOut); 

JRXlsExporter exporter = new JRXlsExporter(); 
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint); 
exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, destFile.toString());  
exporter.exportReport(); 

一些研究之後,我嘗試了其他幾個版本(+4),但我仍然收到此錯誤。有誰知道解決方案?

回答

4

您的班級路徑中有舊版本庫。

如果jasper報告依賴於lib-xxx.jar,那麼確保你的類路徑中沒有其他的lib-yyy.jar。您可以通過查看jasper下載的jar或pom.xm來做到這一點。

正如我所猜測的,在你的班級路徑中有一些老版本的poi。

+0

感謝您的幫助。我已經多次閱讀過這個解決方案。所以已經檢查過了。我在類路徑中唯一的POI版本是3.7。 JasperReport JAR來自http://sourceforge.net/projects/jasperreports/files/jasperreports/JasperReports%205.5.0/jasperreports-5.5.0.jar/download – Tunguska

+0

檢查在哪裏,jre/lib/ext,classpath的位置,可能被重命名爲jar文件。 –

+2

[關於此主題的Apache POI常見問題](http://poi.apache.org/faq.html#faq-N10006)建議了一些[可幫助查找的代碼](http://poi.apache.org/faq。 html#faq-N10006)你真正使用的POI jar – Gagravarr