如何删除,不清除表中的行? Apache POI

我遇到了一个问题。 我不知道如何删除行而不留行后空行。

我正在使用Apache-POI 3.9,并使用下一个代码获取错误:

public List<MeterInfo> addToList(String patternt) throws ParseException, IOException { List<Object> data = new ArrayList<Object>(); int lastRowNum = sheet.getLastRowNum(); Row row; for(int i = 0; i < lastRowNum; i++){ row = sheet.getRow(i); if(patternt.equals(getCurrentString(row))){ data.add(getDataFromRow(row)); sheet.removeRow(row); sheet.shiftRows(row.getRowNum() + 1, row.getRowNum() + 1, -1); } } saveWorkbook(new File("blabla.xlsx")); return data; } 

更新版本:

我find了解决scheme: https ://stackoverflow.com/a/3554129/6812826,但我得到空指针,因为我减lesslastRowNum由每个删除行。

这是新版本:

  public List<Object> addToList(String pattern) throws ParseException, IOException { List<Object> data= new ArrayList<Object>(); for (int i = 0; i <= sheet.getLastRowNum(); i++) { Row row = sheet.getRow(i); if (pattern.equals(getCurrentString(row))) { data.add(getMeterInfo(row)); deleteRow(row); } } saveWorkbook(new File("blabla.xlsx")); return data; } private void deleteRow(Row row) { int lastRowNum = sheet.getLastRowNum(); int rowIndex = row.getRowNum(); if(rowIndex >= 0 && rowIndex < lastRowNum){ sheet.shiftRows(rowIndex + 1, lastRowNum, -1); } if(rowIndex == lastRowNum){ Row removingRow = sheet.getRow(rowIndex); if(removingRow != null){ sheet.removeRow(removingRow); } } } 

最后更新: ManishChristian帮我解决了这个问题!

试试这个代码,它应该工作:

 for(int i = 0; i < sheet.getLastRowNum(); i++) { row = sheet.getRow(i); if(patternt.equals(getCurrentString(row))) { data.add(getDataFromRow(row)); // sheet.removeRow(row); NO NEED FOR THIS LINE sheet.shiftRows(row.getRowNum() + 1, sheet.getLastRowNum() + 1, -1); i--; } } 

每次删除一行时,您需要减less一个。 并使用getLastRowNum()再次获取最后一个行号。