POI操作Excel报错java.lang.NoSuchMethodError

  • 原创
  • |
  • 浏览:11663
  • |
  • 更新:

使用poi做Excel导出功能时,本地服务器正常,服务器下载为空白文档。检查服务器日志时报错:java.lang.NoSuchMethodError: org.apache.poi.util.POILogger.log(I[Ljava/lang/Object;)V

工具/原料

  • poi jar包
  • maven项目

方法/步骤

  1. 1

    检查报错日志如下

    POI操作Excel报错java.lang.NoSuchMethodError
  2. 2

    定位错误

    1、可能是编码出问题,检查编码

  3. 2
    相关内容非法爬取自百度经验
  4. 3

    生成EXCEL文件类是否有如下编码:

    response.setContentType("application/x-msdownload");

    response.setCharacterEncoding("utf-8"); 

    response.setHeader("Content-Disposition", "attachment;filename=" + new String( fileName.getBytes("gb2312"), "ISO8859-1" ));

  5. 4

    2、检查导入poi的包是否存在多个版本,删除多余版本。

  6. 5

    <dependency>  

    <groupId>org.apache.poi</groupId>  

    <artifactId>poi-ooxml</artifactId>  

    <version>3.17</version>  

    </dependency>  

    <dependency>  

    <groupId>org.apache.poi</groupId>  

    <artifactId>poi-ooxml-schemas</artifactId>  

    <version>3.17</version>  

    </dependency>  

    <dependency>  

    <groupId>org.apache.poi</groupId>  

    <artifactId>poi</artifactId>  

    <version>3.17</version>  

    </dependency>

  7. 6

    如果不确定自己引用的是哪个包,可以用一下代码检测class文件走哪个jar包

    POI操作Excel报错java.lang.NoSuchMethodError
  8. 7

    检测class文件代码:

    ClassLoader classloader =

       org.apache.poi.poifs.filesystem.POIFSFileSystem.class.getClassLoader();

    URL res = classloader.getResource(

                 "org/apache/poi/poifs/filesystem/POIFSFileSystem.class");

    String path = res.getPath();

    System.out.println("POI Core came from " + path);

     

    classloader = org.apache.poi.POIXMLDocument.class.getClassLoader();

    res = classloader.getResource("org/apache/poi/POIXMLDocument.class");

    path = res.getPath();

    System.out.println("POI OOXML came from " + path);

     

    classloader = org.apache.poi.hslf.HSLFSlideShow.class.getClassLoader();

    res = classloader.getResource("org/apache/poi/hslf/HSLFSlideShow.class");

    path = res.getPath();

    System.out.println("POI Scratchpad came from " + path);

  9. 8

    将旧的jar从Java build path中删除掉,把workspace里面的包删了再把project clean一下,然后重新部署。

    END
经验内容仅供参考,如果您需解决具体问题(尤其法律、医学等领域),建议您详细咨询相关领域专业人士。
作者声明:本篇经验系本人依照真实经历原创,未经许可,谢绝转载。
展开阅读全部