我正在尝试阅读一系列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,所以我向你征求意见。
答案 0 :(得分:0)
尝试使用 SXSSF 而不是 XSSF 。这应该允许您处理大型Excel文件。 https://poi.apache.org/spreadsheet/how-to.html#sxssf