Чтение EXCEL-файла в Java с использованием jxl - PullRequest
0 голосов
/ 09 июня 2018

У меня проблема с чтением файлов xls в Java с использованием библиотеки jxl.

Не могли бы вы сказать, что не так в моем коде?Я прикрепил ниже.Что-то не так с методом fillData.Консоль возвращает:

Exception in thread "Thread-1" java.lang.NullPointerException
    at StudentLogin.fillData(StudentLogin.java:104)
    at StudentLogin.<init>(StudentLogin.java:70)
    at Login$PBar.run(Login.java:103)
    at java.base/java.lang.Thread.run(Unknown Source)

Заранее благодарим за помощь.

 public void fillData(File file) {
            Workbook workbook = null;
            try {
                workbook = Workbook.getWorkbook(file);
            }
            catch (Exception e) {
            }

            Sheet sheet = workbook.getSheet(0);

            headers.clear();
            for (int i = 0; i < sheet.getColumns(); i++) {
                Cell cell = sheet.getCell(i, 0);
                headers.add(cell.getContents());
            }

            data.clear();
            for (int j = 1; j < sheet.getRows(); j++) {
                Vector<String> d = new Vector<String>();
                for (int i = 0; i < sheet.getColumns(); i++) {
                    Cell cell = sheet.getCell(i, j);
                    d.add(cell.getContents());
                }
                d.add("\n");
                data.add(d);
            }
        }

1 Ответ

0 голосов
/ 09 июня 2018

Я бы порекомендовал вам взглянуть на две части метода fillData:

1) try-catch, вероятно, скрывает проблему: вначале вы вызываете метод getWorkbook, который,согласно его java doc , может выдать исключение, если, например, файл не существует.Однако вы вызываете getWorkbook в блоке try-catch, который даже не печатает исключение.Следовательно, если что-то пойдет не так, вы получите нулевой указатель на workbook.getSheet(0), потому что переменная workbook продолжает содержать нулевое значение (как вы назначаете нулевое значение в первой строке метода).Чтобы избежать этой проблемы, вы можете добавить printStackTrace в блоке catch.Другой вариант - добавить throws Exception в определение метода и удалить блок try-catch.Делая это, вы можете найти истинную причину нулевого указателя.

 try {
      workbook = Workbook.getWorkbook(file);
 } catch (Exception e) {
      e.printStackTrace();
 }

ИЛИ

public void fillData(File file) throws Exception {

 Workbook workbook = Workbook.getWorkbook(file);
 ....
}

2) Инициализированы ли глобальные переменные заголовки?Я не вижу в вашем коде, где вы инициализируете переменные заголовков (как headers = new ArrayList()).Если вы этого не сделали, вы получите нулевой указатель на headers.clear().Более того, та же проблема может возникнуть с переменной data, если вы ее не инициализируете.

...