我遇到了問題。 我不知道如何刪除行而不留空字行。如何刪除,不清除表格中的行? 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;
}
UPDATER版本:
我已經找到了解決辦法:https://stackoverflow.com/a/3554129/6812826,但是我得到空指針,因爲我減少了每個刪除行的lastRowNum。
這是新版本:
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幫我解決這個問題!
爲什麼你使用這樣一箇舊版本的Apache POI?升級時會發生什麼? – Gagravarr
現在,我已經更新到3.15和下一次迭代後刪除行產生空指針異常(@Gagravarr – Andrew