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

时间:2017-03-24 12:47:14

标签: java excel 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 VERSION:

我找到了解决方案: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帮我解决了这个问题!

1 个答案:

答案 0 :(得分:4)

试试这段代码吧:

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--;
    }
}

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