Я читаю excel с использованием Apache POI, но он продолжает выдавать ошибку для найденной ошибки определения класса XSSFWorkbook. Я использовал разные версии библиотек Apache-poi jar (например, 4.1, 4.0 и 3.12), ни одна из них не исправляет эту ошибку. Вот скриншот библиотек, импортированных в настоящее время введите описание изображения здесь Что не так внутри кода?
try {
File fileSrc = new File("C://Eclipse-Workspace//TestData//TestDataSet.xlsx");
FileInputStream fis = new FileInputStream(fileSrc);
XSSFWorkbook workbook = new XSSFWorkbook(fis);
XSSFSheet sheet = workbook.getSheetAt(0);
XSSFCell cellData = sheet.getRow(rowNo).getCell(colNo);
workbook.close();
return cellData.toString();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}
Показана ошибка:
java.lang.NoClassDefFoundError:
org/apache/poi/ss/usermodel/WorkbookFactory
at Utilities.DataAccessorExcel.excelReader(DataAccessorExcel.java:33)
at TestCases.LoginTest.verifyLogin(LoginTest.java:66)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native
Method)
atjava.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMe
thodAccessorImpl.java:62)
atjava.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Dele
gatingMethodAccessorImpl.java:43)at
java.base/java.lang.reflect.Method.invoke(Method.java:567)
Вы должны включить файл poi jar. Его версия будет 4.1.0. Если вы используете Maven pom.xml, включите следующую зависимость.
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.1.0</version>
</dependency>
Если вы не используете Maven, загрузите файлы jar из следующих мест.
http://central.maven.org/maven2/org/apache/poi/poi/4.1.0/poi-4.1.0.jar
http://central.maven.org/maven2/org/apache/poi/poi-ooxml/4.1.0/poi-ooxml-4.1.0.jar
Для чтения файла Excel с Apache POI вам понадобятся следующие файлы jar, если вы не хотите использовать Maven.
Ниже я привожу краткий фрагмент кода о том, как его использовать.
FileInputStream file =
new FileInputStream(
new File(
"testdata\\TestData_01.xlsx"));
XSSFWorkbook workbook = new XSSFWorkbook(file);
XSSFSheet sheet = workbook.getSheetAt(0);
Iterator<Row> rowIterator = sheet.iterator();
while (rowIterator.hasNext()) {
Row row = rowIterator.next();
Cell cell0 = row.getCell(0);
if (cell0 != null) {
System.out.println("First Column Data : "+cell0.getStringCellValue());
}
Cell cell1 = row.getCell(1);
if (cell1 != null) System.out.println("Second Column Data : "+cell1.getStringCellValue());
}
Если вы не используете maven, позвольте мне рассказать вам список используемых файлов jar.
Я загрузил изображение на этот вопрос, оно показывает точные файлы jar, которые я использовал ранее.
Я обновил ответ всеми необходимыми файлами jar с информацией о версии, пожалуйста, проверьте.
Хорошо, я попробовал еще раз в соответствии с обновленным ответом. Выдает ту же ошибку. Похоже, проблема с XSSFWorkbook. поскольку не удалось найти класс «java.lang.NoClassDefFoundError: org/apache/poi/xssf/usermodel/XSSFWorkbook в Utilities.DataAccessorExcel.excelReader(DataAccessorExcel.java:36) в TestCases.LoginTest.verifyLogin(LoginTest.java :64) в java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(собственный метод) "
Нет проблем с XSSFWorkbook, создайте проект, загрузите все jar-файлы, настройте и попробуйте запустить.
Ммм... Исключение вызывает рабочая книга XSSFWorkbook = new XSSFWorkbook(file); Отладчик ломается на этой строке. Я пробовал это снова и снова ... все еще, кажется, не решает проблему.
Позвольте мне отправить вам подробности.
Неважно .. Я разберусь с этим. Спасибо за ваше решение.
он отлично работает, если я запускаю его отдельно (в новом проекте с основным методом), но не работает, когда я пытаюсь прочитать данные из тестового класса TestNg и выдает ту же ошибку
Надеюсь, вы знаете, что можете модифицировать код тестового класса в TestNg.
Я снова создал проект и поместил библиотеки POI в ClassPath, но обнаружил, что библиотеки POI были добавлены как ModulePath, а не в ClassPath. Во всяком случае, я пробовал это раньше, я начал создавать новый проект. И переместил testng.xml на уровень папки src. Он работает нормально, как и ожидалось.
Он по-прежнему не работает, заменив все существующие файлы jar на упомянутые выше. Кроме того, я не использую maven для сборки, это просто из eclipse. Я читаю данные из excel внутри тестового примера (вызывая метод), т.е. запускаю testng.xml. Это дает то же самое исключение отказа.