当前位置: 代码网 > it编程>编程语言>Java > SpringBoot3整合EasyExcel动态实现表头重命名

SpringBoot3整合EasyExcel动态实现表头重命名

2025年03月31日 Java 我要评论
方案简介为了通过 easyexcel 实现动态表头重命名,可以封装一个方法,传入动态的新表头名称列表(list<string>),并结合writehandler接口来重命名表头。同时,通过

方案简介

为了通过 easyexcel 实现动态表头重命名,可以封装一个方法,传入动态的新表头名称列表(list<string>),并结合 writehandler 接口来重命名表头。同时,通过 easyexcel 将数据直接写入到输出流。

核心实现说明

动态表头处理器:通过 dynamicheaderwritehandler 的构造方法接收表头列表,并在写入表头之前动态设置表头内容。

封装写入方法:excelexportutil 提供通用的导出方法,可以根据表头和数据生成 excel 文件并写入到输出流。

直接写入输出流:通过 httpservletresponse 将文件直接导出为响应内容,方便前端下载。

具体实现

1. 自定义动态表头处理器

我们实现一个动态表头处理器,将新表头通过构造方法传入。

import com.alibaba.excel.metadata.head;
import com.alibaba.excel.write.handler.abstractcellwritehandler;
import org.apache.poi.ss.usermodel.cell;
 
import java.util.list;
 
public class dynamicheaderwritehandler extends abstractcellwritehandler {
    private final list<string> newheaders;
 
    // 构造方法传入动态表头列表
    public dynamicheaderwritehandler(list<string> newheaders) {
        this.newheaders = newheaders;
    }
 
    @override
    public void beforecellcreate(org.apache.poi.ss.usermodel.workbook workbook,
                                 org.apache.poi.ss.usermodel.sheet sheet,
                                 org.apache.poi.ss.usermodel.row row,
                                 head head,
                                 integer columnindex,
                                 boolean ishead) {
​
        //powered by moshow@https://zhengkai.blog.csdn.net/
 
​
        if (boolean.true.equals(ishead) && columnindex < newheaders.size()) {
            // 动态设置表头名称
            head.setheadnamelist(list.of(newheaders.get(columnindex)));
        }
    }
}

2. 封装写入方法

创建一个封装的方法,支持通过传入表头和数据,将结果直接输出到流中。

import com.alibaba.excel.easyexcel;
import com.alibaba.excel.write.metadata.writesheet;
 
import javax.servlet.http.httpservletresponse;
import java.io.ioexception;
import java.util.list;
 
public class excelexportutil {
 
    /**
     * 导出 excel 表格
     *
     * @param response  httpservletresponse 响应
     * @param data      数据列表
     * @param headers   动态表头
     * @param filename  文件名
     * @author ​powered by moshow@https://zhengkai.blog.csdn.net/
     */
    public static void exportexcel(httpservletresponse response, list<?> data, list<string> headers, string filename) throws ioexception {
        response.setcontenttype("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
        response.setcharacterencoding("utf-8");
        response.setheader("content-disposition", "attachment;filename=" + filename + ".xlsx");
 
        // 创建动态表头处理器
        dynamicheaderwritehandler headerhandler = new dynamicheaderwritehandler(headers);
 
        // 写入数据到输出流
        easyexcel.write(response.getoutputstream())
                .registerwritehandler(headerhandler)
                .head((class<?>) data.get(0).getclass()) // 假设数据类已经标注了 @excelproperty
                .sheet("sheet1")
                .dowrite(data);
    }
}

3. 使用方法示例

在 controller 中调用封装好的方法,传入动态表头和数据。

import org.springframework.web.bind.annotation.getmapping;
import org.springframework.web.bind.annotation.restcontroller;
 
import javax.servlet.http.httpservletresponse;
import java.io.ioexception;
import java.util.arraylist;
import java.util.list;
 
@restcontroller
public class excelexportcontroller {
 
    @getmapping("/export")
    public void export(httpservletresponse response) throws ioexception {
 
        //​powered by moshow@https://zhengkai.blog.csdn.net/
​
        // 模拟数据
        list<sampledata> data = new arraylist<>();
        data.add(new sampledata("张三", 25, "北京"));
        data.add(new sampledata("李四", 30, "上海"));
 
        // 动态表头
        list<string> headers = list.of("姓名(新)", "年龄(新)", "地址(新)");
 
        // 导出 excel
        excelexportutil.exportexcel(response, data, headers, "示例文件");
    }
 
    // 数据类
    public static class sampledata {
        private string name;
        private integer age;
        private string address;
 
        public sampledata(string name, integer age, string address) {
            this.name = name;
            this.age = age;
            this.address = address;
        }
 
        // getters 和 setters 省略
    }
}

通过这种方式,你可以灵活设置动态表头,并实现直接导出到客户端的功能。

到此这篇关于springboot3整合easyexcel动态实现表头重命名的文章就介绍到这了,更多相关springboot easyexcel表头重命名内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com