AnyLogic 7: библиотека доступа к Excel (Apache POI) не указана

AnyLogic 7: библиотека доступа к Excel (Apache POI) не указана

Я пытаюсь использовать класс AnyLogic ExcelFile, но оказывается, что AnyLogic не может найти требуемую библиотеку Apache POI:

Error during model startup:
Excel access library (Apache POI) is not specified (or is specified incorrectly) in the classpath
Caused by: org/apache/poi/openxml4j/exceptions/InvalidFormatException
Caused by: org.apache.poi.openxml4j.exceptions.InvalidFormatException
java.lang.RuntimeException: Excel access library (Apache POI) is not specified (or is specified incorrectly) in the classpath
    at com.xj.anylogic.engine.Engine.a(Unknown Source)
    at com.xj.anylogic.engine.Engine.start(Unknown Source)
    at com.xj.anylogic.engine.ExperimentSimulation.b(Unknown Source)
    at com.xj.anylogic.engine.ExperimentSimulation.run(Unknown Source)
    at generic_agent_based_model_with_births_and_deaths.Simulation.executeShapeControlAction(Simulation.java:107)
Caused by: java.lang.NoClassDefFoundError: org/apache/poi/openxml4j/exceptions/InvalidFormatException
    at generic_agent_based_model_with_births_and_deaths.ExcelDataSource.onStartup(ExcelDataSource.java:668)
    at generic_agent_based_model_with_births_and_deaths.ExcelDataSource.start(ExcelDataSource.java:652)
    at generic_agent_based_model_with_births_and_deaths.Main.start(Main.java:1046)
    ... 4 more
Caused by: java.lang.ClassNotFoundException: org.apache.poi.openxml4j.exceptions.InvalidFormatException
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
    ... 7 more

Как я могу это исправить?

Некоторые примечания:

  1. Я работаю с моделью, изначально разработанной кем-то другим. Я предполагаю, что модель изначально создавалась для AnyLogic 6.9, но я использую AnyLogic 7.0.3.
  2. Я предполагаю, что AnyLogic должен автоматически импортировать библиотеку POI: есть идеи, что он сделал неправильно / что я сделал неправильно, чтобы вызвать сбой AnyLogic?
  3. Чтобы избежать путаницы, ExcelDataSource — это класс-оболочка, который я создал, чтобы упростить ExcelFile для нашего варианта использования.

Заранее спасибо!


person Dylan Knowles    schedule 29.09.2014    source источник
comment
Убедились ли вы, что все jar-файлы Apache POI находятся в вашем пути к классам и доступны для вашего приложения?   -  person Gagravarr    schedule 30.09.2014
comment
Существуют определенные версии, импортированные AnyLogic, поэтому общий POI не работает. Смотрите ответ Татьяны. :)   -  person Dylan Knowles    schedule 01.10.2014


Ответы (1)


AnyLogic использует библиотеку Apache POI для работы с электронными таблицами Excel. Но по умолчанию он отключен за ненадобностью. Вы должны удалить элемент Excel File из палитры Connectivity, чтобы иметь возможность использовать методы Apache POI. Другой способ - добавить библиотеку в список зависимостей модели (см. раздел Зависимости окна свойств модели).

person Tatiana Gomzina    schedule 01.10.2014
comment
Всем тем, кто будет читать это в будущем: вы не можете просто использовать класс ExcelFile. Вы должны перетащить элемент ExcelFile из палитры в рабочую область. - person Dylan Knowles; 01.10.2014
comment
В Мордор просто так не ExcelFile :-) - person Stuart Rossiter; 29.10.2014