2016-09-26 70 views
1

嘗試從Excel文件(* .xlsx)使用Apache POI 3.15加載JSP中的信息。在Excel爲什麼不從excel(* .xlsx)(使用Apache POI)加載信息?

查看信息

NUM溶液

1首先

2第二

3第三

嘗試使用代碼

try { 
     InputStream ExcelFileToRead = new FileInputStream("C:\\server\\to_db.xlsx"); 
     XSSFWorkbook wb = new XSSFWorkbook(ExcelFileToRead); 

     XSSFWorkbook test = new XSSFWorkbook(); 

     XSSFSheet sheet = wb.getSheetAt(0); 
     XSSFRow row; 
     XSSFCell cell; 

     Iterator rows = sheet.rowIterator(); 

     while (rows.hasNext()) { 
      row = (XSSFRow) rows.next(); 
      Iterator cells = row.cellIterator(); 
      while (cells.hasNext()) { 
       cell = (XSSFCell) cells.next(); 

       if (cell.getCellType() == XSSFCell.CELL_TYPE_STRING) { 
        out.print(cell.getStringCellValue() + " "); 
       } else if (cell.getCellType() == XSSFCell.CELL_TYPE_NUMERIC) { 
        out.print(cell.getNumericCellValue() + " "); 
       } else { 
        //U Can Handel Boolean, Formula, Errors 
       } 
      } 
      out.println("Succefully!!!"); 
     } 
    } 
    catch (Exception e) { 
    out.println("exception: "+e); 
    } 

得到一個奇怪的結果:

缺席錯誤和JSP缺席信息....

問題問題是,在所有的瀏覽器再現。 如果我嘗試打開C:\ server \ to_db.xlsx操作系統Windows響應「文件正忙」。 可能是什麼問題以及如何解決?

回答

2

當您打開FileInputStreamFileOutputStream時,您需要關閉它,否則根據所使用的操作系統,特別是在Windows操作系統上,您的文件可能被進程鎖定。更一般地說,你需要close全部Closeable對象,你用來防止任何泄漏或像這樣的問題。

因此,您應該將代碼重新編寫爲使用try-with-resources語句的代碼,以便自動關閉您的資源。

try (InputStream ExcelFileToRead = new FileInputStream("C:\\server\\to_db.xlsx"); 
    XSSFWorkbook wb = new XSSFWorkbook(ExcelFileToRead)) { 
    ... 

事實上,在你的代碼中有2個Closeable對象它們ExcelFileToReadwb

0

我想你必須使用「.close()」關閉文件。 This可能會幫助你。

0

在lib目錄中缺少一些公共庫

公地collections4-4.1.jar,公地編解碼器1.10.jar,公地文件上傳-1.3.jar

它們的存在解決的問題。