org/apache/poi/openxml4j/exceptions/InvalidFormatException с использованием JXLS

Я использую библиотеку JXLS Java для создания отчетов Excel. Я пытаюсь запустить пример учебника по началу работы (демонстрация вывода коллекции объектов). Как предложено в руководстве, я использую maven для указания необходимых библиотек в файле конфигурации сборки моего проекта. Ниже приведен код Java

List<Employee> employees = generateSampleEmployeeData();
    try(InputStream is = ObjectCollectionDemo.class.getResourceAsStream("object_collection_template1.xls")) {
        try(OutputStream os = new FileOutputStream("target/" + fileName)) {
            Context context = new Context();
            context.putVar("employees", employees);
            JxlsHelper.getInstance().processTemplate(is, os, context);
        }
    }

Когда я запускаю программу в моем затмении, я получаю следующее исключение:

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/poi/openxml4j/exceptions/InvalidFormatException
    at java.lang.Class.getDeclaredMethods0(Native Method)
    at java.lang.Class.privateGetDeclaredMethods(Unknown Source)
    at java.lang.Class.privateGetMethodRecursive(Unknown Source)
    at java.lang.Class.getMethod0(Unknown Source)
    at java.lang.Class.getMethod(Unknown Source)
    at org.jxls.util.TransformerFactory.createTransformer(TransformerFactory.java:34)
    at org.jxls.util.JxlsHelper.createTransformer(JxlsHelper.java:217)
    at org.jxls.util.JxlsHelper.processTemplate(JxlsHelper.java:104)
    at com.ucas.ObjectCollectionDemo.main(ObjectCollectionDemo.java:42)
Caused by: java.lang.ClassNotFoundException: org.apache.poi.openxml4j.exceptions.InvalidFormatException
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    ... 9 more

Ниже приведен снимок зависимостей maven. введите описание изображения здесь

Версия Java: 1.8

Окружающая среда: Windows 7

IDE: Затмение Неон

2 ответа

Решение

Похоже, у вас есть проблема с некоторыми XML-зависимостями, необходимыми для обработки Apache POI.

Я вижу их на скриншоте ваших зависимостей, но по какой-то причине они не действуют, когда вы запускаете свою программу. Может быть, есть некоторый конфликт между зависимостями.

Попробуйте создать минимальный проект jxls, просто добавив только следующие две зависимости и посмотрите, работает ли он

    <dependency>
        <groupId>org.jxls</groupId>
        <artifactId>jxls</artifactId>
        <version>2.4.0</version>
    </dependency>
    <dependency>
        <groupId>org.jxls</groupId>
        <artifactId>jxls-poi</artifactId>
        <version>1.0.12</version>
    </dependency>

Затем вы можете добавить свои собственные зависимости одну за другой и посмотреть, в какой момент они ломаются.

Я не вижу особого смысла в коде в вашем вопросе, поэтому я буду снимать пробелы здесь. Похоже, что у вас есть несоответствие версии с файлом object_collection_template1.xls создаваемая с другой версией Excel, чем JXLS, совместима, по крайней мере, так, как написано.

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