当前位置: 首页 > 面试题库 >

如何删除,而不是清除工作表中的行?Apache POI

卜泓
2023-03-14
问题内容

我遇到了一个问题。我不知道如何在不将后记留空的情况下删除行。

我正在使用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;
    }

更新版本:

我找到了解决方案:但是由于每个删除行都减少了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帮助我解决了这个问题!


问题答案:

试试下面的代码,它应该可以工作:

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()



 类似资料:
  • 当单击按钮时,我试图删除表中的数据行。我当前的代码在1-3次按下后删除行内容,但我希望它能清除内容,然后在一次按下中添加新内容。 这是我正在使用的代码。。。 5行数据显示在jTable中。再次按下按钮后,将删除两行数据。如果我按下按钮,第二次留下一行数据。第三次按下按钮,所有行都被删除,下一次按下按钮将插入5行数据。理想情况下,我希望这个按钮总是清除行字段,然后添加插入的数据。使每个按钮按下显示新

  • 下面是我正在使用的代码: 执行这段代码后,它将清除整行文本,而不是只清除给定矩形内的文本。 为了更好地解释事情,我附上了pdf文档。 任何帮助都将不胜感激。

  • 我的第一个列表中有3个对象,但只有一个包含必需的注释 两个列表都以包含包含注释的唯一对象结尾 如果有人有主意的话,我就有点迷路了!

  • 正如标题所示,我无法使用delete()选项。我在网上发了很多帖子,但都找不到正确的答案。我正在Homestead上使用Laravel5.5(一周前安装,最新版本左右)。 让我给你一些代码,我真的希望有人能帮助我。 这让我头痛,奥氮平快用完了。请告诉我我做错了什么,如果遗漏了什么,请告诉我! 这是我的控制器: 这是我的索引页(索引与后端的管理索引相同: 然后是路线: 然后政策: 最后是中间件: 在

  • 我在一个数字海洋Ubuntu虚拟机上运行一个独立的清漆实例,基本上运行良好。该设置用于加载一个位于其他任何地方的旧wordpress服务器。这工作得很好,但我很难清除内容。当谈到清除时,我的意思是使URL的缓存无效,以迫使清漆从后端获取新版本(只是为了确保我看到了一些关于清除/禁止的恼怒)。 我已经为清除设置了一个ACL,就我所能看到的varnishlog的清除被接受了-从WordPress博客的

  • 问题内容: 我有一张桌子。为了快速升级/部署网站,我做了一个新表,其中包含一些新数据,方法是: 现在每个表都有一个PK列,看起来像: 重要的一点是,两个表都依赖于完全相同的序列。没有。就我的目的而言,这似乎还可以。 此后,我加载了新数据并重命名了表,以便将其作为实盘接管,而原始表变成了。现在我尝试删除: 足够公平,列默认值仍取决于顺序。 这是踢脚线。 因此,不再对序列具有任何可见的依赖关系,但是它