java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Java EasyExcel修改Sheet名称

Java使用EasyExcel动态修改模板Sheet名称的具体方案

作者:weixin_46244623

在使用 EasyExcel 通过模板导出时,模板中的 sheet 名称通常是固定的,如果我们希望在导出时根据业务需要 动态修改 sheet 名称,可以通过自定义 SheetWriteHandler 完成,所以本文介绍了Java使用EasyExcel动态修改模板Sheet名称的具体方案,需要的朋友可以参考下

引言

在使用 EasyExcel 通过模板导出时,模板中的 sheet 名称通常是固定的,如果我们希望在导出时根据业务需要 动态修改 sheet 名称,可以通过自定义 SheetWriteHandler 完成。

很多同学在钉钉群里提到可以写拦截器,我百度了一下,最终成功用下面的方式解决了 —— 记录一下方案。

使用方式

只需要在构建 WriteSheet 时注册我们自定义的 handler:

WriteSheet writeSheet = EasyExcel.writerSheet(0)
        .registerWriteHandler(new CustomTemplateSheetStrategy("动态命名sheet"))
        .build();

自定义 SheetWriteHandler 拦截器

下面是完整代码:用于在 sheet 创建完成后,动态修改 sheet 名称。

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

/**
 * 自定义模板导出sheet拦截器
 */
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);
    }
}

原理说明

EasyExcel 在创建 sheet 时会回调 SheetWriteHandler

我们需要在 创建后 修改名称,因此代码写在 afterSheetCreate 中。

writeWorkbookHolder.getCachedWorkbook() 实际获取的是底层的 POI Workbook,直接改 sheet 名即可。

结论

通过自定义 SheetWriteHandler,可以优雅地实现动态修改模板 Excel 中的 sheet 名称,适用于:

✔ 模板导出
✔ 多 sheet 模板
✔ sheet 名依赖参数、日期、用户输入等场景

到此这篇关于Java使用EasyExcel动态修改模板Sheet名称的具体方案的文章就介绍到这了,更多相关Java EasyExcel修改Sheet名称内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文