Прошу помощи. Я пытаюсь разобрать несколько файлов Excel и отправить данные в базу данных (Java 8). Я использую jxls, poi, postgre. Промежуточная цель - простой синтаксический анализ и вывод данных из файлов Excel на консоль. Ниже приведены небольшие фрагменты кода, который используется. При компиляции возникает ошибка:
java.lang.NoSuchMethodError: **org.apache.poi.ss.usermodel.Cell.getCellType()I**
-at org.jxls.reader.OffsetCellCheckImpl.readStringValue(OffsetCellCheckImpl.java:99)
-at org.jxls.reader.OffsetCellCheckImpl.getCellValue(OffsetCellCheckImpl.java:70)
-at org.jxls.reader.OffsetCellCheckImpl.isCheckSuccessful(OffsetCellCheckImpl.java:47)
-at org.jxls.reader.OffsetCellCheckImpl.isCheckSuccessful(OffsetCellCheckImpl.java:60)
-at org.jxls.reader.OffsetRowCheckImpl.isCheckSuccessful(OffsetRowCheckImpl.java:51)
-at org.jxls.reader.OffsetRowCheckImpl.isCheckSuccessful(OffsetRowCheckImpl.java:66)
-at org.jxls.reader.SimpleSectionCheck.isCheckSuccessful(SimpleSectionCheck.java:23)
-at org.jxls.reader.XLSForEachBlockReaderImpl.read(XLSForEachBlockReaderImpl.java:45)
-at org.jxls.reader.XLSSheetReaderImpl.read(XLSSheetReaderImpl.java:29)
-at org.jxls.reader.XLSReaderImpl.readSheet(XLSReaderImpl.java:65)
-at org.jxls.reader.XLSReaderImpl.readSheet(XLSReaderImpl.java:57)
-at org.jxls.reader.XLSReaderImpl.read(XLSReaderImpl.java:40)
-at Parser.getList(Parser.java:36)
-at ProjectActions.main(ProjectActions.java:86)
Класс парсера:
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.jxls.reader.ReaderBuilder;
import org.jxls.reader.XLSReadStatus;
import org.jxls.reader.XLSReader;
import org.xml.sax.SAXException;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Parser {
public List<App> getList(App app) {
List<App> list = new ArrayList<>();
try (
InputStream inputXML = new BufferedInputStream(new FileInputStream(app.getXmlPath()));
InputStream inputXLS = new BufferedInputStream(new FileInputStream(app.getExcelPath()))
)
{
XLSReader mainReader = ReaderBuilder.buildFromXML(inputXML);
Map beans = new HashMap();
beans.put(app.getItems(), list);
try {
System.out.println(inputXML.toString());
System.out.println(inputXLS.toString());
XLSReadStatus readStatus = mainReader.read(inputXLS, beans);
} catch (NoSuchMethodError e) {
System.out.println("reading error");
e.printStackTrace();
}
} catch (IOException | SAXException | InvalidFormatException e) {
e.printStackTrace();
}
return list;
}
public List<List<String>> getListListString (List<App> list) {
return new Converter().listAppConvertListListString(list);
}
public void printList(List<App> list) {
System.out.println("============= START PRINTING LIST =============");
for (App app : list) {
System.out.println(app);
}
}
public void printStringList(List<List<String>> list) {
System.out.println("============= START PRINTING STRING LIST =============");
for (List<String> line: list) {
for (String element : line) {
System.out.print(element + "\t");
}
System.out.println();
}
}
}
основной метод:
public static void main(String args[]) throws Exception{
App app = new App1();
Parser parser = new Parser();
parser.printStringList(parser.getListListString(parser.getList(app)));
}
Также часть сервиса работает через чистый apache пои, в котором есть класс утилиты - DataUtil. С его помощью я без проблем прочитал другой файл ecxel - выше:
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.ss.usermodel.DateUtil;
import java.text.SimpleDateFormat;
public class DataUtil {
public static String getCellText(Cell cell) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd");
CellType ct = cell.getCellType();
// System.out.println("ct = " + ct);
String result = "";
switch (ct) {
case STRING:
result = cell.getRichStringCellValue().getString();
break;
case NUMERIC:
if (DateUtil.isCellDateFormatted(cell)) {
result = sdf.format(cell.getDateCellValue());
} else {
result = String.valueOf(cell.getNumericCellValue());
}
break;
case BOOLEAN:
result = String.valueOf( cell.getBooleanCellValue());
break;
case FORMULA:
result = String.valueOf(cell.getNumericCellValue());
break;
default:
break;
}
return result;
}
}
Я пробовал везде ставить apache версию poi - 4.1.2, 4.1.1, 3.7, 3.6. Не помогает. Я попытался полностью очистить загруженные библиотеки и загрузить все с помощью maven. Не помогает. Пытался загрузить ВСЕ ВСЕ jar вручную. Не помогает. Подскажите пожалуйста, как решить эту проблему, потому что второй день пытаюсь решить и перечитываю кучу информации? Ничего не помогает. Заранее спасибо.