java poi删除特定行_java-如何删除,而不清除工作表中的行? Apache POI

这篇博客介绍了在Java中使用Apache POI库删除Excel工作表中特定行的方法,同时避免了删除行后导致的工作表空白问题。博主分享了遇到的问题、尝试的解决方案以及最终的正确代码实现。
摘要由CSDN通过智能技术生成

我遇到了一个问题.

我不知道如何在不将后记留空的情况下删除行.

我正在使用Apache-POI 3.9,使用下一个代码时出现错误:

public List addToList(String patternt) throws ParseException, IOException {

List data = new ArrayList();

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,但是由于每个删除行都会减少lastRowNum,所以我得到了空指针.

这是新版本:

public List addToList(String pattern) throws ParseException, IOException {

List data= new ArrayList();

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()再次获取最后一行.

标签:apache-poi,java,excel

来源: https://codeday.me/bug/20191026/1934116.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值