通过POI拷贝sheet页并编辑

10 篇文章 1 订阅
该代码示例展示了如何使用ApachePOI库在Java中复制一个Excel工作表,并根据提供的回调函数对新工作表进行操作。方法接收源Sheet名、目标Sheet名、文件路径、新Sheet的索引和一个SheetCallBack接口,该接口用于执行自定义编辑。如果操作成功并需要保存,文件将被更新并返回true。
摘要由CSDN通过智能技术生成
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

/**
 * @author: guanglai.zhou
 * @date: 2023/4/3 13:23
 */
public class SheetCopyUtils {

    /**
     * 根据源Sheet拷贝一个新的Sheet,然后进行操作
     * 如果拷贝完成而且操作完成 则返回true
     *
     * @param sourceSheetName 源sheet名称
     * @param targetSheetName 目标sheet名称
     * @param filePath        文件路径
     */
    public static boolean copySheet(String sourceSheetName, String targetSheetName, String filePath, int newSheetIndex, SheetCallBack sheetCallBack) {
        try (Workbook workbook = WorkbookFactory.create(new FileInputStream(filePath))) {
            Sheet sheet = workbook.getSheet(targetSheetName);
            if (sheet != null) {
                return false;
            }
            Sheet sourceSheet = workbook.getSheet(sourceSheetName);
            Sheet targetSheet = workbook.cloneSheet(workbook.getSheetIndex(sourceSheet));
            workbook.setSheetName(workbook.getSheetIndex(targetSheet), targetSheetName);
            // 执行各种回调操作
            boolean shouldSave = sheetCallBack.doEdit(sourceSheet, targetSheet);
            if (!shouldSave) {
                return false;
            }
            // 将结果写入到excel当中
            try (FileOutputStream fileOut = new FileOutputStream(filePath)) {
                workbook.write(fileOut);
            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        try (Workbook workbook = WorkbookFactory.create(new FileInputStream(filePath))) {
            workbook.setSheetOrder(targetSheetName, newSheetIndex);
            // 将结果写入到excel当中
            try (FileOutputStream fileOut = new FileOutputStream(filePath)) {
                workbook.write(fileOut);
            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        return true;
    }


    public interface SheetCallBack {
        /**
         * @param sourceSheet 源Sheet页对象
         * @param targetSheet 目标Sheet页对象
         * @return 编辑操作是否需要保存
         */
        boolean doEdit(Sheet sourceSheet, Sheet targetSheet);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

lang20150928

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

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

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

打赏作者

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

抵扣说明:

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

余额充值