Я пытался создать свое первое веб-приложение, используя IntelliJ и Tomcat, и одной из задач является возможность загрузки и обработки файла листа Excel. Итак, я посмотрел в Интернете и нашел библиотеку Apache POI, которая может помочь мне разобрать файл Excel. Но когда я скачал все необходимые файлы jar, скопировал и вставил некоторый тестовый код и запустил сервер, на веб-странице отображается ошибка с состоянием http 500, основной причиной которой является java.lang.ClassNotFoundException: org.apache.poi .openxml4j.opc.internal.marshallers.PackagePropertiesMarshaller $ NamespaceImpl.
Я столкнулся с проблемой с другими jar-файлами, но все они были решены путем помещения соответствующих jar-файлов в папку lib tomcat, кроме этой.
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;
import java.io.File;
import java.io.FileInputStream;
import java.util.Iterator;
public class ExcelParser {
private String pathname;
public ExcelParser(String pathname) {
this.pathname = pathname;
}
public void parse() {
try {
FileInputStream file = new FileInputStream(new File("/Users/JohnDoe/Desktop/test.xlsx"));
//Create Workbook instance holding reference to .xlsx file
XSSFWorkbook workbook = new XSSFWorkbook(file);
//Get first/desired sheet from the workbook
XSSFSheet sheet = workbook.getSheetAt(0);
//Iterate through each rows one by one
Iterator<Row> rowIterator = sheet.iterator();
while (rowIterator.hasNext()) {
Row row = rowIterator.next();
//For each row, iterate through all the columns
Iterator<Cell> cellIterator = row.cellIterator();
while (cellIterator.hasNext()) {
Cell cell = cellIterator.next();
//Check the cell type and format accordingly
switch (cell.getCellType()) {
case NUMERIC:
System.out.print(cell.getNumericCellValue() + "t");
break;
case STRING:
System.out.print(cell.getStringCellValue() + "t");
break;
}
}
System.out.println();
}
file.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
Я просто тестирую функциональность синтаксического анализа Excel, так что не беспокойтесь о пути.
Кстати, я вижу, что этот (внутренний) класс объявлен в poi-ooxml4-4.1.0.jar, который также включен в мою папку Tomcat lib.
Любые идеи, почему это происходит, и как я должен это исправить, приветствуются.