Ошибка Jxls: не удается загрузить XLS-преобразователь. Пожалуйста, убедитесь, что реализация Transformer находится в classpath

Этот вопрос уже задавался один раз, но никто не дал ему абсолютного решения. Я пытаюсь сгенерировать файл 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

Большое спасибо!

5 ответов

В моем случае в моем classpath есть несовместимые версии apache poi. jxls-poi:1.0.15 использования poi:3.17пока у меня poi:3.9,

Изменение poi до 3.17 исправило мою проблему.

Убедитесь, что в пути к классам есть jar-файлы jxls-poi и Apache POI (если вы планируете использовать Apache POI)

Я также столкнулся с той же проблемой при использовании профилей Maven и фильтрации ресурсов. Это было исправлено отключением фильтрации ресурсов в ваших шаблонах jxls excel.

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

Странно, что во всем Интернете до сих пор нет ответа на этот вопрос. Прежде всего, вам просто нужно заменить ExportExcelServlet.class.getResourceAsStream с участием FileInputStream

Хорошо, если вы используете maven, когда maven build, 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>

Удостовериться jxls а также jxls-poi находятся в вашем Maven Pom, также проверьте, что ваш файл шаблона находится в вашем классе путь или нет.

Я столкнулся с этой проблемой, мой код вроде:

InputStream is = JxlsTest.class.getResourceAsStream("/template.xlsx");

Моя проблема в том, что я опечатан /template.xlsx как /template.xls, jxls не может найти файл шаблона xls, поэтому выдается эта ошибка.

Другие вопросы по тегам