исключение при использовании книги Excel

1

Я получаю эти исключения в своем коде, в то время как я пишу некоторые данные в книге excel, используя банки poi:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/poi/UnsupportedFileFormatException
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(Unknown Source)
    at java.security.SecureClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.access$100(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    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)
    at WorkBookDemo.main(WorkBookDemo.java:27)
Caused by: java.lang.ClassNotFoundException: org.apache.poi.UnsupportedFileFormatException
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    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)
    ... 13 more

Я добавил следующие банки:

  1. XMLBeans-2.4.0
  2. пои-OOXML-схемы-3.11
  3. пои-3,11
  4. Обще-каротаж-1,1
  5. dom4j-1.6.1
  6. log4j-1.2.17

    import java.io.File;
    import java.io.FileOutputStream;
    
    import java.util.Map;
    import java.util.Set;
    import java.util.TreeMap;
    
    import org.apache.poi.ss.usermodel.Cell;
    import org.apache.poi.ss.usermodel.Row;
    import org.apache.poi.xssf.usermodel.XSSFSheet;
    import org.apache.poi.xssf.usermodel.XSSFWorkbook;
    
    public class WorkBookDemo {
    
       public static void main(String[] args)
       {
            //Blank workbook
            XSSFWorkbook workbook = new XSSFWorkbook();
    
            //Create a blank sheet
            XSSFSheet sheet = workbook.createSheet("Employee Data");
    
            //This data needs to be written (Object[])
            Map<String, Object[]> data = new TreeMap<String, Object[]>();
            data.put("1", new Object[] {"ID", "NAME", "LASTNAME"});
            data.put("2", new Object[] {1, "Amit", "Shukla"});
            data.put("3", new Object[] {2, "Lokesh", "Gupta"});
            data.put("4", new Object[] {3, "John", "Adwards"});
            data.put("5", new Object[] {4, "Brian", "Schultz"});
    
           //Iterate over data and write to sheet
            Set<String> keyset = data.keySet();
            int rownum = 0;
            for (String key : keyset)
            {
                Row row = sheet.createRow(rownum++);
                Object [] objArr = data.get(key);
                int cellnum = 0;
                for (Object obj : objArr)
                {
                    Cell cell = row.createCell(cellnum++);
                    if(obj instanceof String)
                        cell.setCellValue((String)obj);
                    else if(obj instanceof Integer)
                        cell.setCellValue((Integer)obj);
                }
            }
            try
            {
            //Write the workbook in file system
                FileOutputStream out = new FileOutputStream(new File("exps.xlsx"));
                workbook.write(out);
                out.close();
                System.out.println("exps.xlsx written successfully on disk.");
            }
            catch (Exception e)
            {
                e.printStackTrace();
            }
        }
    
    }
    
Теги:
excel
apache-poi

4 ответа

2
Лучший ответ
FileOutputStream out = new FileOutputStream(new File("exps.xlsx"));

Выходной поток файла - это выходной поток для записи данных в файл или в файл-дескриптор. Будет ли файл доступен или может быть создан, зависит от базовой платформы. Некоторые платформы, в частности, позволяют открывать файл для записи только одним FileOutputStream (или другим объектом для записи файлов) одновременно. В таких ситуациях конструкторы этого класса не сработают, если файл уже открыт.

Поскольку вы явно создаете объект File и передаете его в конструктор FileOutputStream. Предполагается, что файл "exps.xlsx" уже создан. [Справка.]

Incase, это не так, вы просто передаете имя файла в конструкторе FileOutputStream.

FileOutputStream out = new FileOutputStream("exps.xlsx");

Это автоматически создаст файл, если он уже не создан.

Более того, я тестировал ваш данный код и использовал следующую зависимость от Maven и это сработало.

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>3.10-FINAL</version>
</dependency>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>3.10</version>
</dependency>

Если вы не используете проект maven, вы можете явно добавить вышеупомянутые jars из вышеупомянутых версий.

  • 1
    Фляги POI всегда должны быть из одной и той же версии - ваш совет здесь опасен, так как он смешивает 3.9 и 3.10!
  • 0
    могут возникнуть проблемы с совместимостью.
Показать ещё 3 комментария
2

приведенный ниже список банок, необходимых для библиотеки apachePOI, должен быть такой же, как показано ниже:

org.apache.poi.3.11
org.apache.poi-ooxml.3.11
org.apache.poi-ooxml-schemas.3.11

если вышеупомянутые банки одной и той же библиотеки имеют разные версии, то u получит исключение как "java.lang.NoClassDefFoundError: org/apache/poi/UnsupportedFileFormatException"

2

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

org/apache/poi/UnsupportedFileFormatException is under poi-x.xx-xxx-xx.jar

Ошибок в коде нет. Добавьте банки для создания пути.

0

вы также можете проверить наличие дубликатов банок пои, предположим, вам нужен poi-ooxml-3.9. баночка. но в вашей папке lib есть и poi-ooxml-3.11.jar, poi-ooxml-3.9.jar, затем удаляет poi-ooxml-3.11.jar, тогда он должен работать.

  • 0
    Почему вы удалили более новую банку? Конечно, вы хотите сохранить новейшую версию со всеми исправлениями ошибок и удалить старую?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню