java 使用poi excl删除一行支持批量,下面的行上移

这篇博客展示了如何在Java中利用Apache POI库删除Excel文件中的指定行。首先,导入了所需的POI依赖,并定义了删除行的逻辑。通过读取Excel模板文件,获取工作簿和工作表,然后按顺序删除指定行号的行。在删除过程中,先删除数据行,再调整行索引,最后将修改后的Excel写入新的文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

直接 show code

引入的pom版本

<poi.version>4.1.2</poi.version>

<!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
<dependency>
	<groupId>org.apache.poi</groupId>
	<artifactId>poi</artifactId>
	<version>${poi.version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml -->
<dependency>
	<groupId>org.apache.poi</groupId>
	<artifactId>poi-ooxml</artifactId>
	<version>${poi.version}</version>
</dependency>
import com.lt.dailytest.utils.DateUtils;
import org.apache.commons.io.FileUtils;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.BorderStyle;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.test.context.SpringBootTest;

import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Date; 
@Test
    public void test2() throws Exception {
        String fileName = "templates/test.xlsx";
        Workbook wb = this.dogetExclContent(fileName);
        Sheet sheet = wb.getSheetAt(0);
        //删除的是下面一行的数据 行索引从0开始,比实际行数少1,这是删除第四行
        ArrayList<Integer> integers = new ArrayList<>();
        integers.add(3);
        integers.add(5);
        integers.add(8);
        for (Integer integer : integers) {
            Row row = sheet.getRow(integer);
            sheet.removeRow(row);
        }
        //删除 exclindex的行数  integers index 需要删除的索引 如果要删除第四行 则 integer中的值为3
        integers.sort(Integer::compareTo);
        int rowNum = sheet.getLastRowNum();
        for (int i = 0; i < integers.size(); i++) {
            Integer integer = integers.get(i);
            Integer num = integer + 1 - i;
            sheet.shiftRows(num, rowNum, -1);
        }
        String formateDate = DateUtils.formatDate(new Date(), DateUtils.yyyyMMddHHmmss);
        //输出Excel文件
        FileOutputStream output = new FileOutputStream(String.format(writefileName, "test") + formateDate + ".xls");
        wb.write(output);

        output.flush();
        output.close();
        wb.close();
        logger.info("write ok ");
    }

private Workbook dogetExclContent(String fileName) throws IOException {
        InputStream resourceAsStream = this.getClass().getClassLoader().getResourceAsStream(fileName);
        if (null == resourceAsStream) {
            logger.error("文件获取为空,【{}】", fileName);
        }

        Workbook wb = null; //new XSSFWorkbook(resourceAsStream);
        if (fileName.endsWith(".xls")) {
            wb = new HSSFWorkbook(resourceAsStream);
        }
        if (fileName.endsWith(".xlsx")) {
            wb = new XSSFWorkbook(resourceAsStream);
        }
        return wb;
    }

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Diligently_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值