Чтение 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(неизвестный источник) в 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, и это сработало. Большое спасибо. - person Dev web; 25.05.2018

Попробуйте использовать XSSFWorkbook вместо HSSFWorkbook.

РЕДАКТИРОВАТЬ

Как описано здесь https://poi.apache.org/spreadsheet/

HSSF — это чистая Java-реализация формата файлов Excel '97 (-2007) проекта POI. 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(неизвестный источник) в java.security.AccessController.doPrivileged(собственный метод) в 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