java - 如何删除,不清除工作表中的行?

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

我在 https://stackoverflow.com/a/3554129/6812826 中找到了解决方案,但我得到了一个 NullPointerException,因为我将 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);
        }
    }
}

最佳答案

试试这段代码,它应该可以工作:

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() 再次获取最后的行号。

关于java - 如何删除,不清除工作表中的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42999923/

相关文章:

java - 使用 JDK 6 中捆绑的 jax-rs 引用实现构建 Web 服务

java - 在字节数组上模拟吉他放大器的失真

regex - 类型?文本 block 正则表达式函数

VBA 代码中的 Excel 公式

java - 有没有办法使用 POI Api 将图像添加到单元格?

java - 如何在Java中每小时创建日志文件

java - 在另一个类中设置变量会导致错误

c# - epplus获取列标题

java apache poi - xwpfparagraph 到字符串转换

java - 如何使用 Apache POI 从 Excel 获取货币代码?