EasyExcel根据模板导出动态修改sheet名称

本文介绍了一种使用easyexcel根据模板导出Excel时动态修改Sheet名称的方法。通过自定义拦截器`CustomTemplateSheetStrategy`,可在运行时灵活更改模板中Sheet的名字。

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

前言

在公司中使用easyexcel根据模板导出excel表格数据时,由于需要根据不同内容动态修改模板中sheet的名称,网上搜索也很少有这一块的具体实现,所以就给大家分享一下自己的实现方式(也是作者Jiaju Zhuang提出来的)。

easyexcel依赖

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
    <version>2.2.6</version>
</dependency>

自定义拦截器

import com.alibaba.excel.write.handler.SheetWriteHandler;
import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
import com.alibaba.excel.write.metadata.holder.WriteWorkbookHolder;

/**
 * 自定义模板导出sheet拦截器
 * @author huangxiao
 * @version 1.0
 * @since 2022-01-10
 */
public class CustomTemplateSheetStrategy implements SheetWriteHandler {

    private Integer sheetNo;

    private String sheetName;

    public CustomTemplateSheetStrategy(String sheetName) {
        this.sheetName = sheetName;
    }

    public CustomTemplateSheetStrategy(Integer sheetNo, String sheetName) {
        this.sheetNo = sheetNo;
        this.sheetName = sheetName;
    }

    @Override
    public void beforeSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) {
    }

    /**
     * 功能:动态修改模板中sheet的名称
     * sheet创建完成后调用
     * @param writeWorkbookHolder
     * @param writeSheetHolder
     */
    @Override
    public void afterSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) {
        if (sheetName == null) {
            return;
        }
        if (sheetNo == null) {
            sheetNo = 0;
        }
        writeWorkbookHolder.getCachedWorkbook().setSheetName(sheetNo, sheetName);
    }
}

说明

使用模板导出时,要使用cachedWorkbook,而不是workbook
在这里插入图片描述

### 如何使用 EasyExcel 根据模板导出 Excel 文件 为了实现基于模板Excel 导出功能,EasyExcel 提供了一种简便的方式来填充数据至预定义的 Excel 模板中。下面是一个具体的 Java 实现案例。 #### 准备工作 确保项目已引入 EasyExcel 的依赖项。对于 Maven 项目而言,需在 `pom.xml` 中加入相应的依赖声明[^2]。 ```xml <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>{latest-version}</version> </dependency> ``` #### 创建实体类映射 创建一个 POJO 类用于表示要写入的数据结构: ```java public class DemoData { @ExcelProperty("字符串标题") private String string; @ExcelProperty("日期标题") private Date date; // Getters and Setters... } ``` #### 编写导出逻辑 编写一段代码片段展示如何加载模板并执行数据填充操作: ```java import com.alibaba.excel.EasyExcel; import java.util.ArrayList; import java.util.Date; import java.util.List; public class TemplateExport { public static void main(String[] args) throws Exception { // 设置模板路径以及目标文件名 String templatePath = "template.xlsx"; String fileName = "output_with_template.xlsx"; List<DemoData> data = new ArrayList<>(); // 构建待填入的数据集 for (int i = 0; i < 10; i++) { DemoData item = new DemoData(); item.setString("测试" + i); item.setDate(new Date()); data.add(item); } // 调用 EasyExcel API 进行模板导出 EasyExcel.write(fileName).withTemplate(templatePath).sheet().doFill(data); } } ``` 这段程序会读取名为 `template.xlsx` 的模板文件,并将生成的结果保存为新的 Excel 文档 `output_with_template.xlsx`,其中包含了由 `DemoData` 对象列表所代表的信息。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值