Как решить Apache POI "рабочая книга", возможно, не было инициализировано - PullRequest
1 голос
/ 23 марта 2020

Мне нужно прочитать файл Excel, и я работаю с java весенней загрузкой, Apache poi. нам сказали

При работе с новым форматом файла .xlsx вы должны использовать классы XSSFWorkbook, XSSFSheet, XSSFRow и XSSFCell. Для работы со старым форматом .xls используйте классы HSSFWorkbook, HSSFSheet, HSSFRow и HSSFCell.

это мой код:


    Workbook workbook;
            if (FileExtension == "xlsx"){
                workbook = new XSSFWorkbook(excelFile);
            }
            else if (FileExtension == "xls"){
                workbook = new HSSFWorkbook(excelFile);
            }
Sheet datatypeSheet = workbook.getSheetAt(0);

Теперь я получаю «рабочую книгу» возможно, не было инициализировано. Как это решить?

Ответы [ 5 ]

3 голосов
/ 23 марта 2020

Текущие apache poi версии предоставляют WorkbookFactory . При использовании методов create этого класса нет необходимости определять формат файла (XSSF или HSSF) по расширению файла. Методы WorkbookFactory.create создают XSSFWorkbook или HSSFWorkbook в зависимости от найденного содержимого файла.

Так что используйте:

...
Workbook workbook = WorkbookFactory.create(excelFile);
Sheet datatypeSheet = workbook.getSheetAt(0);
...
1 голос
/ 23 марта 2020

Я думаю, что вы хотите express это ...

Workbook workbook;
if (FileExtension == "xlsx"){
    workbook = new XSSFWorkbook(excelFile);
}
// for other case
else{
    workbook = new HSSFWorkbook(excelFile);
}
Sheet datatypeSheet = workbook.getSheetAt(0);

Обратите внимание на комментарий в коде, я уверен, что вы можете сами исследовать разницу, что очень поможет.

0 голосов
/ 23 марта 2020

Я полагаю, что это не относится к проблемам JVM, но иногда инициализация и декларирование иногда являются единственным способом. Попробуйте это:

        if (FileExtension == "xlsx"){
               Workbook workbook = new XSSFWorkbook(excelFile);
        }
        else if (FileExtension == "xls"){
              Workbook workbook = new HSSFWorkbook(excelFile);
        }

Sheet datatypeSheet = workbook.getSheetA

0 голосов
/ 23 марта 2020

Не инициализирован .. вы должны сделать это

Workbook wb;

wb = Workbook.getWorkbook(new File("d:\\test\\book1.xls"));
0 голосов
/ 23 марта 2020

Попробуйте это ...

Workbook workbook = null;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...