Прочетете Excel от Apache poi java

Имам странен проблем с четенето на excel файл, създадох файл за тестване, но все още имам същия проблем, работната книга се връща, която има 0 листа, но има 3 листа: ето моя код:

FileInputStream fs = new FileInputStream(new File("C:/Users/TO124415/Desktop/test.xlsx"));

    HSSFWorkbook wb = new HSSFWorkbook();
    HSSFSheet hs = wb.getSheetAt(0);
    int number = wb.getNumberOfSheets();
    System.out.println(number);
    FormulaEvaluator form = wb.getCreationHelper().createFormulaEvaluator();
    HSSFCell value = wb.getSheetAt(0).getRow(14).getCell(1);
            for (Row rw : hs){
        for(Cell cell : rw){
            switch(form.evaluateInCell(cell).getCellType()){
            case Cell.CELL_TYPE_NUMERIC:
                System.out.println(cell.getNumericCellValue());
            case Cell.CELL_TYPE_STRING:
                System.out.println(cell.getStringCellValue());
            }
        }
    }

Имам тази грешка:

Exception in thread "main" java.lang.IllegalArgumentException: Sheet index (0) is out of range (no sheets)

Тази грешка трябва да е, ако задам getSheetAt(3), защото знам, че индексът започва от 0, а не от 1. Някой може да обясни, моля?


person Dev web    schedule 25.05.2018    source източник


Отговори (3)


Изглежда, че използвате грешен тип файл за неподдържания клас.

Класът HSSFWorkbook ще поддържа само файлов тип .xls, докато класът XSSFWorkbook ще поддържа както файлов тип .xls, така и .xlsx

Моля, направете някоя от стъпките по-долу

  1. Променете файловото разширение като .xls (файлът .xlsx се поддържа само в XSSF, но не и в HSSF.)
  2. Променете HSSF като XSSF, като запазите файловото разширение xlsx
person Subburaj    schedule 25.05.2018
comment
Благодаря, използвах .xls с XSSF и ето новия проблем, причинен от: java.lang.ClassNotFoundException: org.apache.xmlbeans.XmlException в java.net.URLClassLoader$1.run(Unknown Source) в java.security.AccessController.doPrivileged (Нативен метод) в java.net.URLClassLoader.findClass(Неизвестен източник) в java.lang.ClassLoader.loadClass(Неизвестен източник) в sun.misc.Launcher$AppClassLoader.loadClass(Неизвестен източник) в java.lang.ClassLoader.loadClass (Неизвестен източник) ... още 1 - person Dev web; 25.05.2018
comment
@Dev Web: Ако използвате XSSFWorkbook, тогава трябва да се добавят XSSF POI буркани. Моля, добавете необходимите буркани и след това проверете - person Subburaj; 25.05.2018
comment
Бурканът беше включен, но все пак ти беше прав, изтеглих xmlbeans jar и той проработи. Благодаря много. - person Dev web; 25.05.2018

Опитайте да използвате XSSFWorkbook вместо HSSFWorkbook.

РЕДАКТИРАНЕ

Както е обяснено тук https://poi.apache.org/spreadsheet/

HSSF е чистата Java реализация на проекта POI на файловия формат Excel '97 (-2007). XSSF е чистата Java реализация на проекта POI на файловия формат Excel 2007 OOXML (.xlsx).

person Michal    schedule 25.05.2018
comment
Получавам тази грешка: Причинена от: java.lang.ClassNotFoundException: org.apache.xmlbeans.XmlException в java.net.URLClassLoader$1.run(Unknown Source) в java.security.AccessController.doPrivileged(Native Method) в java .net.URLClassLoader.findClass(Неизвестен източник) в java.lang.ClassLoader.loadClass(Неизвестен източник) в sun.misc.Launcher$AppClassLoader.loadClass(Неизвестен източник) - person Dev web; 25.05.2018
comment
добавете зависимостта poi-ooxml - person Michal; 25.05.2018

Проблемът ви е, че не зареждате файла си, а създавате нов. Тези редове тук:

FileInputStream fs = new FileInputStream(new File("C:/Users/TO124415/Desktop/test.xlsx"));

HSSFWorkbook wb = new HSSFWorkbook();

Отворете файл за четене, след това незабавно го игнорирайте и създайте чисто нова празна работна книга. Празна работна книга без листове в нея, поради което получавате грешката, че няма листове....

Вместо това искате да направите нещо като:

File input = new File("C:/Users/TO124415/Desktop/test.xlsx");
Workbook wb = WorkbookFactory.create(input);

Това ще се прочете в съдържанието на работната книга и автоматично ще открие типа за вас (така че можете да използвате XLS и XLSX)

person Gagravarr    schedule 25.05.2018
comment
прави същото нещо, все още има проблема. - person Dev web; 25.05.2018
comment
Трябва да заредите вашия файл, а не да създавате нов празен! И ако наистина искате да работите с .xlx, трябва да използвате общите Workbook неща, а не HSSF класовете, които са само .xls - person Gagravarr; 25.05.2018