Читать Excel из Apache Poi Java - PullRequest
0 голосов
/ 25 мая 2018

У меня странная проблема с чтением файла 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. Кто-то может объяснить, пожалуйста

Ответы [ 3 ]

0 голосов
/ 25 мая 2018

Похоже, вы используете неправильный тип файла для неподдерживаемого класса.

Класс HSSFWorkbook будет поддерживать только тип файла .xls, тогда как класс XSSFWorkbook будет поддерживать оба типа файлов .xls и .xlsx

Пожалуйста, выполните одно из следующих действий:

  1. Измените расширение файла на .xls (файл .xlsx поддерживается только в XSSF, но не в HSSF.)
  2. Измените HSSF на XSSF, сохранив расширение файла xlsx
0 голосов
/ 25 мая 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)

0 голосов
/ 25 мая 2018

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

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

Как объясняется здесь https://poi.apache.org/spreadsheet/

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

...