使用jxl在Java中读取EXCEL文件

时间:2018-06-09 15:48:21

标签: java excel jxl

我在使用jxl库将xls文件读入Java时遇到问题。

你能告诉我我的代码有什么问题吗?我附在下面。有问题的是wif 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 :(得分:0)

我建议你看一下方法fillData的两个部分:

1)try-catch可能隐藏了这个问题:在开始时,你调用方法getWorkbook,根据它的java doc,它可以抛出例外,例如,文件不存在。但是,您调用getWorkbook块中的try-catch甚至不打印异常。因此,如果出现任何问题,您将在workbook.getSheet(0)获得一个空指针,因为变量workbook保持一个空值(因为您在方法的第一行中指定了null)。要避免此问题,您可以在catch块中添加printStackTrace。另一种选择是在方法定义中添加throws Exception并删除try-catch块。这样做,您可能会发现空指针的真正原因。

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

OR

public void fillData(File file) throws Exception {

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

2)变量头是否全局初始化?我在你的代码中看不到你初始化变量头的方式(做headers = new ArrayList())。如果你没有这样做,你将在headers.clear()获得一个空指针。此外,如果您不对其进行初始化,则变量data也会出现同样的问题。