Jxls错误:无法加载XLS转换器。请确保Transformer实现在classpath中

时间:2016-03-10 16:24:17

标签: java excel jxl jxls

此问题已经被问过一次,但没有人给出绝对的解决方案。 我试图从现有模板生成一个xls文件,但我得到一个错误,我不知道如何面对!

我的代码: String nombre =“Manuel”;

        try (InputStream templateFileName = ExportExcelServlet.class.getResourceAsStream("/segJBOSS/lib/xls/Tabla_Gestion.xlsx")) {
            try (OutputStream destFileName = new FileOutputStream("Tabla_Gestion.xls")) {
                ArrayList<String> array = new ArrayList<String>();
                array.add(nombre);
                Context context = new Context();
                context.putVar("gestion", array);
                JxlsHelper.getInstance().processTemplate(templateFileName, destFileName, context);              
                } catch (Exception e) {
                // TODO: handle exception
                System.out.println(e.getMessage());
                e.printStackTrace();                
                }

        } catch (Exception e) {
            // TODO: handle exception
            System.out.println(e.getMessage());
            e.printStackTrace();
        }
    } catch (Exception e) {
        // TODO: handle exception
        System.out.println(e.getMessage());
        e.printStackTrace();
    }

这是在WebServlet中实现的。

17:08:43,472 ERROR [org.jxls.util.TransformerFactory] (default task-3) Method createTransformer of org.jxls.transform.poi.PoiTransformer class thrown an Exception: java.lang.reflect.InvocationTargetException

Caused by: java.lang.NullPointerException

17:08:43,478 INFO  [stdout] (default task-3) Cannot load XLS transformer. Please make sure a Transformer implementation is in classpath
17:08:43,479 ERROR [stderr] (default task-3) java.lang.IllegalStateException: Cannot load XLS transformer. Please make sure a Transformer implementation is in classpath

非常感谢!

6 个答案:

答案 0 :(得分:1)

请确保您在类路径中有 jxls-poi 和Apache POI jar(如果您打算使用Apache POI)

答案 1 :(得分:1)

使用maven配置文件和资源过滤时,我也遇到了同样的问题。通过关闭资源过滤到jxls excel模板来修复它。

  <resource>
    <directory>src/main/resources/</directory>
    <filtering>false</filtering>
    <includes>
      <include>**/*.xlsx</include>
    </includes>
  </resource> 

答案 2 :(得分:0)

好吧,如果你使用maven,当maven构建时,maven可能会破坏excel文件。

JXLS报告的异常可能不明确,实际上是创建了一个excel文件异常。

你可以这样做:

<resources>
        <resource>
            <directory>src/main/resources/</directory>
            <filtering>true</filtering>
            <excludes>
                <exclude>template/*.*</exclude>
            </excludes>
        </resource>
        <resource>
            <directory>src/main/resources/</directory>
            <filtering>false</filtering>
            <includes>
                <include>template/*.*</include>
            </includes>
        </resource>
 </resources>

答案 3 :(得分:0)

确保您的maven pom中有guard let data = data, let jsonObj = try? JSONSerialization.jsonObject(with: data, options: .allowFragments) as? NSDictionary else { // Handle error here } jxls, 还要检查您的模板文件是否在您的类路径中。

我遇到了这个问题,我的代码如下:

jxls-poi

我的问题是我错误输入InputStream is = JxlsTest.class.getResourceAsStream("/template.xlsx"); /template.xlsx,jxls无法找到模板xls文件,因此抛出此错误。

答案 4 :(得分:0)

就我而言,我的类路径中有不兼容的apache poi版本。 jxls-poi:1.0.15使用poi:3.17,而我使用poi:3.9

将poi更改为3.17解决了我的问题。

答案 5 :(得分:0)

奇怪的是,整个互联网上仍然没有这个问题的答案。首先,您只需要将ExportExcelServlet.class.getResourceAsStream替换为FileInputStream