3

我正在使用 apache poi 打开现有的 excel 文件。

public static int generateReport(Calendar csdate,Calendar cedate) throws Exception
{
     FileInputStream fileIn =null;
     FileOutputStream fileOut = null;
     int sum=0;//For calculating the total number of tickets
    final Workbook wb;
    fileIn =new FileInputStream("d:\\excelfiles\\TicketsReport.xlsm");
    wb = org.apache.poi.ss.usermodel.WorkbookFactory.create(fileIn);<-- Exception
    final Sheet sheet = wb.getSheet("Report");
    //rest of stuff
}

我有一个 servlet,它从 html 页面获取日期并调用generateReport(). 问题是该程序以前以相同的tomcat 6版本和servlet2.4版本运行。在 Eclipse 中,该行没有编译时错误WorkbookFactory.create()。这是堆栈跟踪。

java.lang.NoClassDefFoundError: org/apache/poi/ss/usermodel/WorkbookFactory
at ReportFromJira.generateReport(ReportFromJira.java:59)
at JiraReportServlet.doPost(JiraReportServlet.java:52)
at JiraReportServlet.doGet(JiraReportServlet.java:36)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
at java.lang.Thread.run(Unknown Source)

当我手动浏览 jar 文件时,我发现了这一点。

poi-3.8-20120326.jar contains
org.apache.poi.ss.usermodel->Workbook.class file

and poi-ooxml-3.8-20120326.jar contains
org.apache.poi.ss.usermodel->WorkbookFactory.class file

我的类路径中包含两个 jar 文件。

知道为什么例外吗?

4

3 回答 3

2

org.apache.poi.ss.usermodel.WorkbookFactory包含在poi-ooxmljar 文件中。为了使用它,您需要核心 POI jar、POI OOXML jar 及其依赖项。您得到的异常表明您至少缺少其中一个。

您可以在Apache POI 组件页面上找到有关内部和外部不同 POI 组件的依赖关系的更多信息。我建议您查看一下,查看您的应用程序并构建,然后放入您缺少的罐子中!

于 2012-12-05T12:20:51.573 回答
0

只需将其中一个罐子放在WEB-INF\lib您的 WAR\EAR 中,因为这是 Tomcat 默认从中挑选罐子的地方。

当通过 eclipse 配置未运行 tomcat 时,仅包含在 eclipse 项目中是不够的。

于 2012-12-05T13:20:29.477 回答
0

解决方案非常简单:

  1. 下载此链接中的所有 jar 文件http://archive.apache.org/dist/poi/release/bin/poi-bin-3.9-20121203.zip
  2. 提取文件并将所有 jar 文件复制到项目中的“\WebContent\WEB-INF\lib\”。请注意:您必须将其复制并粘贴到您在 ECLIPSE 中的项目中,不要通过 Windows 资源管理器复制粘贴它或将其作为外部 JAR 放置在 java 构建路径中,因为它永远不会起作用。

就是这样,你完成了.. :D 如果这能解决你的问题,请告诉我..

于 2013-08-06T18:32:14.743 回答