Jxls错误:无法加载XLS转换器。请确保类路径中存在转换器实现。

7
这个问题已经被问过一次,但是没有人给出绝对的解决方案。 我试图从现有的模板生成一个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个回答

2
请确保您的类路径中有 jxls-poi 和 Apache POI jars(如果您计划使用Apache POI)。

1
是的,我已经安装了所有必要的文件,您觉得这可能与模板文件位置有关吗? - Lorenzo Gamboa
不,我不认为这与模板位置有关。你能否也发布完整的错误堆栈跟踪? - Leonid Vysochyn
已解决。这与Maven依赖项安装有关。 - Lorenzo Gamboa
1
我不是楼主,但是提供的答案给了正确的提示:我需要安装Apache POI(实际上很明显)。谢谢。 - furins
我已经将 jxls-poi-1.0.12.jar 文件添加到 lib 文件夹中,这是 apache-poi 文件,对吗?还需要添加其他文件吗? - ashwin mahajan
显示剩余2条评论

2
在我的情况下,我的classpath中存在不兼容的apache poi版本。 jxls-poi:1.0.15使用poi:3.17,而我却有poi:3.9
将poi更改为3.17解决了我的问题。

0
请确保您的Maven pom中包含jxlsjxls-poi,还要检查您的模板文件是否在类路径中。
我遇到了这个问题,我的代码像这样:
InputStream is = JxlsTest.class.getResourceAsStream("/template.xlsx");

我的问题是我把 /template.xlsx 打成了 /template.xls,导致jxls找不到对应的xlsx模板文件,因此抛出了这个错误。


0

好的,如果您使用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>

0

当我使用Maven配置文件和资源过滤时,我也遇到了同样的问题。通过关闭jxls Excel模板的资源过滤,问题得以解决。

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

0

很奇怪,在整个互联网上仍然没有答案来回答这个问题。首先,你只需要用FileInputStream替换ExportExcelServlet.class.getResourceAsStream


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接