java 导出excel 创建多级表头 Easyexcel web下载

java 导出excel 创建多级表头 Easyexcel web下载使用 Easyexcelmav 依赖 操作 excel dependency groupId com alibaba groupId artifactId easyexcel artifactId version 2 1 1 version dependency

maven依赖

  
    <dependency> <groupId>com.alibaba 
     groupId> <artifactId>easyexcel 
      artifactId> <version>2.1.1 
       version> <scope>test 
        scope>  
         dependency> <dependency> <groupId>com.alibaba 
          groupId> <artifactId>easyexcel 
           artifactId> <version>2.1.1 
            version> <scope>compile 
             scope>  
              dependency> 

使用对象创建

 import com.alibaba.excel.annotation.ExcelIgnore; import com.alibaba.excel.annotation.ExcelProperty; import lombok.Data; import java.util.Date; //导出数据成excel 多级头导出 配合测试类 @Data public class DemoData { 
    @ExcelProperty({ 
   "序号"}) private Integer orderNumber; @ExcelProperty({ 
   "一级","二三四级"}) private String ceshi; @ExcelProperty({ 
   "一级","二级头", "三级头","四级"}) private String string; @ExcelProperty({ 
   "一级","二级头", "三级头","四级"}) private Date date; @ExcelProperty({ 
   "一级","二级头", "三级头","四级"}) private Double doubleData; / * 忽略这个字段 */ @ExcelIgnore private String ignore; } 

测试类

//多级输出excel @Test public void mergeWrite() { 
    //创建数据 List<DemoData> list = new ArrayList<DemoData>(); for (int i = 0; i < 10; i++) { 
    DemoData data = new DemoData(); data.setOrderNumber(i); data.setCeshi("测试"); data.setString("测试" + i); data.setDate(new Date()); data.setDoubleData(0.820); list.add(data); } //文件名 String fileName = System.currentTimeMillis()+".xlsx"; // 每隔2行会合并 把eachColumn 设置成 3 也就是我们数据的长度,所以就第一列会合并。当然其他合并策略也可以自己写 LoopMergeStrategy loopMergeStrategy = new LoopMergeStrategy(2, 1); // 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭 EasyExcel.write(fileName, DemoData.class).registerWriteHandler(loopMergeStrategy).sheet("合并单元格") .doWrite(list); } 

new LoopMergeStrategy(2, 1); 2代表合并2行,1是索引 ,从第二个字段开始合并 序号字段不合并。

web导出下载文件

import com.alibaba.excel.EasyExcel; import com.alibaba.excel.write.merge.LoopMergeStrategy; import com.alibaba.excel.write.metadata.style.WriteCellStyle; import com.alibaba.excel.write.style.HorizontalCellStyleStrategy; import com.molomessage.message.excel.entity.DemoData; import org.apache.poi.ss.usermodel.HorizontalAlignment; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.ArrayList; import java.util.Date; import java.util.List; @RestController @RequestMapping("/export") public class ExportExcelController { 
    //使用easyExcel导出 @GetMapping("/test") public void easyExcelExport(HttpServletResponse response){ 
    try { 
    //创建数据 List<DemoData> list = new ArrayList<DemoData>(); for (int i = 0; i < 10; i++) { 
    DemoData data = new DemoData(); data.setOrderNumber(i); data.setCeshi("测试"); data.setString("测试" + i); data.setDate(new Date()); data.setDoubleData(0.820); list.add(data); } WriteCellStyle headWriteCellStyle = new WriteCellStyle(); //设置头居中 headWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER); //内容策略 WriteCellStyle contentWriteCellStyle = new WriteCellStyle(); //设置 水平居中 contentWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.LEFT); HorizontalCellStyleStrategy horizontalCellStyleStrategy = new HorizontalCellStyleStrategy(headWriteCellStyle, contentWriteCellStyle); response.setContentType("application/vnd.ms-excel;charset=utf-8"); //response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); response.setCharacterEncoding("utf-8"); // 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系 String fileName = System.currentTimeMillis()+".xlsx"; // 每隔2行会合并 把eachColumn 设置成 3 也就是我们数据的长度,所以就第一列会合并。当然其他合并策略也可以自己写 LoopMergeStrategy loopMergeStrategy = new LoopMergeStrategy(2, 1); response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xls"); // 这里需要设置不关闭流 EasyExcel.write(response.getOutputStream(), DemoData.class).autoCloseStream(Boolean.FALSE).registerWriteHandler(horizontalCellStyleStrategy).sheet("用户信息表").doWrite(list); } catch (IOException e) { 
    e.printStackTrace(); } } } 
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/219875.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午9:41
下一篇 2026年3月17日 下午9:42


相关推荐

  • VMware Workstation 安装中标麒麟V6桌面版操作系统

    VMware Workstation 安装中标麒麟V6桌面版操作系统中标麒麟 V6 桌面版操作系统镜像下载地址 链接 https pan baidu com s 1YYwReKQ6jSC EF3aDMw 提取码 bpug 一 创建虚拟机点击 编辑虚拟机设置 选择中标麒麟 ISO 镜像 二 安装操作系统启动虚拟机电源 进入光盘引导 选择 安装系统 下一步 选择 是 选择 手动设置 分区 点击

    2026年3月26日
    3
  • plt.savefig()的用法以及保存路径

    plt.savefig()的用法以及保存路径图像有时候比数据更能满足人们的视觉需求pytorch下保存图像有很多种方法,但是这些基本上都是基于图像处理的,将图像的像素指定一定的维度,具体可见以下博客:Pytorch中保存图片的方式_造未来-CSDN博客_pytorch保存图片主要是写一些函数来保存图片;另外,pytorch中有很多可以直接保存图片的语句如save_image(fake_images,’./img/fake_images-{}.png’.format(epoch+1))此语句同样需要转化像素。.

    2022年6月22日
    447
  • 服务器光口位置,linu服务器光口配置ip

    服务器光口位置,linu服务器光口配置iplinu 服务器光口配置 ip 内容精选换一换 Atlas500Pro 智能边缘服务器 型号 3000 的端口规划如图 1 和表 1 所示 两台 Atlas500Pro 智能边缘服务器 型号 3000 配置双机备份功能时 网络规划示例如表 2 所示 当多台服务器进行分布式训练时 需要通过昇腾软件中的 HCCNTool 工具配置 NPU 卡 IP 地址 device 的网卡 IP 用于多台训练服务器间的网络模型参数通过 NP

    2026年3月26日
    2
  • Android 沉浸式状态栏与华为虚拟按键的冲突处理

    Android 沉浸式状态栏与华为虚拟按键的冲突处理

    2021年3月12日
    151
  • Minimum Fleet Problem「建议收藏」

    Minimum Fleet Problem「建议收藏」本文为MITSenseableCityLaboratory2018年5月23号发表于Nature杂志Addressingtheminimumfleetprobleminon-demandurbanmobility论文的学习笔记。问题定义给定一批出行需求,在出行需求被严格满足且最大空驶时间不超过δ分钟约束下,找到…

    2022年6月5日
    36
  • pycharm怎么新建python项目_pycharm怎么新建一个项目

    pycharm怎么新建python项目_pycharm怎么新建一个项目如果选择新建虚拟环境并且没有加入本地解释器的库的话会导致没有代码提示的一、如果选择新建虚拟环境的话二、选择系统解释器,这样可能会导致多个项目时依赖库太多三、如果不是这个原因导致没有代码提示的话,可以看看下面的其他注意事项1.2.3.看看这里的解释器是否正常,一般都是默认正常的…

    2022年8月25日
    9

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号