2016-09-26 34 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

它们的存在解决的问题。