簡體   English   中英

使用jxl在Java中讀取EXCEL文件

[英]Reading EXCEL file in Java using 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);
            }
        }

我建議您看一下方法fillData兩個部分:

1) try-catch可能隱藏了問題:首先,您調用方法getWorkbook ,根據其java doc ,該方法可能在例如文件不存在的情況下引發異常。 但是,您getWorkbooktry-catch塊中調用getWorkbook ,該塊甚至不輸出異常。 因此,如果出現任何問題,您將在workbook.getSheet(0)處獲得一個空指針,這將導致變量workbook保持空值(在方法的第一行中分配空值)。 為避免此問題,您可以在catch塊中添加一個printStackTrace 另一種選擇是在方法定義中添加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可能會發生相同的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM