java Apache POI 3.9 Eclipse(阅读大xlsx文件)

时间:2016-01-28 08:38:12

标签: java eclipse excel apache

我正在尝试阅读一系列excel文件(.xlsx),但是当文件必须有多行时,它会使代码无法工作..当文件很小时,一切正常。我试图从第5行开始,从第5行开始读取第一列。这是我的代码:

String FilePath ="C:\\xxx";
    List<String> data = new ArrayList<String>();
    File[] listOfFiles = new File(FilePath).listFiles();


    for (int i = 0; i < listOfFiles.length; i++) {
      if (listOfFiles[i].isFile() && listOfFiles[i].getName().substring(listOfFiles[i].getName().length()-4).equals("xlsx")) {              

        int pos_data = 0;       
        String excelFilePath = "C:\\xxx\\" + listOfFiles[i].getName();
        FileInputStream inputStream = new FileInputStream(new File(excelFilePath));


        Workbook workbook = new XSSFWorkbook(inputStream);
        Sheet firstSheet = workbook.getSheetAt(1);
        java.util.Iterator<Row> iterator = firstSheet.iterator();

        while (iterator.hasNext()) {
            Row nextRow = iterator.next();
            java.util.Iterator<Cell> cellIterator = nextRow.cellIterator();

                Cell cell = cellIterator.next();

                if(pos_data > 4)
                    data.add(cell.getStringCellValue());

                pos_data++;

        }   

        workbook.close();
        inputStream.close();
      }
    }

我已经完成了一些测试,当文件很大时,在第一次迭代中, fisrtSheet.getLastRowNum()返回-1, cell 中的值返回列中的最后一个值。

我试着为自己解决这个问题,但我之前从未使用过POI,所以我向你征求意见。

1 个答案:

答案 0 :(得分:0)

尝试使用 SXSSF 而不是 XSSF 。这应该允许您处理大型Excel文件。 https://poi.apache.org/spreadsheet/how-to.html#sxssf