使用easyexcel 导出多级表头demo

这篇具有很好参考价值的文章主要介绍了使用easyexcel 导出多级表头demo。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

先看效果:

使用easyexcel 导出多级表头demo,java,java,服务器,前端

1、引入maven依赖

<!--EasyExcel -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
    <version>3.2.1</version>
</dependency>        

2、实体类

package com.huawei.it.domain;
import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;

/**
 * @description: 嫁功率考勤实体类
 * @author: yeyong
 * @create: 2024-01-16
 */
public class Jglkq{

    @ExcelProperty({"考勤状态"})
    private String kqzt; //考勤状态

    @ExcelProperty({"日期"})
    @ColumnWidth(20)
    private String rq; //日期

    @ExcelProperty({"工号"})
    private String gh; //工号

    @ExcelProperty({"姓名"})
    private String xm; //姓名

    @ExcelProperty({"应出勤"})
    private String ycq; //应出勤

    @ExcelProperty({"实出勤"})
    private String scq; //实出勤

    @ExcelProperty({"班制名称"})
    private String bzmc;  //班制名称

    @ExcelProperty({"班一","上"})
    private String sw; //上

    @ExcelProperty({"班一","下"})
    private String xw; //下

    @ExcelProperty({"平时加班"})
    private String psjb; //平时加班

    @ExcelProperty({"假日加班"})
    private String jrjb; //假日加班

    @ExcelProperty({"周六排班8小时"})
    private String str1; //周六排班8小时

    @ExcelProperty({"周六超8小时"})
    private String str2; //周六超8小时

    //忽略这个字段
    @ExcelIgnore
    private String IsNight;  //是否夜班  0:否  1:是



    public String getKqzt() {
        return kqzt;
    }

    public void setKqzt(String kqzt) {
        this.kqzt = "正常";
    }

    public String getRq() {
        return rq;
    }

    public void setRq(String rq) {
        this.rq = rq;
    }

    public String getGh() {
        return gh;
    }

    public void setGh(String gh) {
        this.gh = gh;
    }

    public String getXm() {
        return xm;
    }

    public void setXm(String xm) {
        this.xm = xm;
    }

    public String getYcq() {
        return ycq;
    }

    public void setYcq(String ycq) {
        this.ycq = ycq;
    }

    public String getScq() {
        return scq;
    }

    public void setScq(String scq) {
        this.scq = scq;
    }

    public String getBzmc() {
        return bzmc;
    }

    public void setBzmc(String bzmc) {
        this.bzmc = bzmc;
    }

    public String getSw() {
        return sw;
    }

    public void setSw(String sw) {
        this.sw = sw;
    }

    public String getXw() {
        return xw;
    }

    public void setXw(String xw) {
        this.xw = xw;
    }

    public String getPsjb() {
        return psjb;
    }

    public void setPsjb(String psjb) {
        this.psjb = psjb;
    }

    public String getJrjb() {
        return jrjb;
    }

    public void setJrjb(String jrjb) {
        this.jrjb = jrjb;
    }

    public String getStr1() {
        return str1;
    }

    public void setStr1(String str1) {
        this.str1 = str1;
    }

    public String getStr2() {
        return str2;
    }

    public void setStr2(String str2) {
        this.str2 = str2;
    }

    public String getIsNight() {
        return IsNight;
    }

    public void setIsNight(String isNight) {
        IsNight = isNight;
    }

}

3、web导出 controller

package com.huawei.web.controller.it;
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.alibaba.excel.write.style.column.SimpleColumnWidthStyleStrategy;
import com.huawei.common.core.controller.BaseController;
import com.huawei.common.core.page.TableDataInfo;
import com.huawei.common.utils.poi.MonthSheetWriteHandler;
import com.huawei.it.domain.DemoData;
import com.huawei.it.domain.Jglkq;
import com.huawei.it.service.JglkqService;
import org.apache.poi.ss.usermodel.*;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

/**
 * @description:
 * @author: yeyong
 * @create: 2024-01-16
 */
@Controller
@RequestMapping("/hr/jglkq")
public class JglkqController extends BaseController {
    private String prefix = "it/hr";
    @Autowired
    private JglkqService jglkqService;

 //使用easyExcel导出
    @GetMapping("/export")
    public void easyExcelExport(HttpServletResponse response,Jglkq jglkq){
        //备注:使用easyExcel导出多级表头
        try {
            //准备数据
            List<Jglkq> kqList =new ArrayList<Jglkq>();
            List<Jglkq> list = jglkqService.selectJglkqList(jglkq);
            for (Jglkq kq1 : list) {
                Jglkq kq = new Jglkq();
                kq.setKqzt(kq1.getKqzt());  //考勤状态
                kq.setRq(kq1.getRq()); //日期
                kq.setGh(kq1.getGh());  //工号
                kq.setXm(kq1.getXm());  //姓名
                kq.setYcq("1");  //应出勤
                kq.setScq("1");  //实出勤
                kq.setBzmc(kq1.getBzmc());  //班制名称
                kq.setSw(kq1.getSw());  //上班
                kq.setXw(kq1.getXw());   //下班
                kq.setPsjb(kq1.getPsjb());  //平时加班
                kq.setJrjb(kq1.getJrjb());  //假日加班
                kq.setStr1(kq1.getStr1());  //
                kq.setStr2(kq1.getStr2());  //
                kqList.add(kq);
            }

            //response.setContentType("application/vnd.ms-excel");
            response.setContentType("application/vnd.ms-excel;charset=utf-8");
            response.setCharacterEncoding("utf-8");
            //StringBuffer bigTitle = new StringBuffer("考勤结果明细查询");
            //String fileName = URLEncoder.encode(bigTitle.toString(), "UTF-8")+ ".xlsx";
            String fileName = System.currentTimeMillis()+".xlsx";
            response.setHeader("Content-disposition", "attachment;filename=" + fileName);

            // 头的策略
            WriteCellStyle headWriteCellStyle = new WriteCellStyle();
            headWriteCellStyle.setFillForegroundColor(IndexedColors.WHITE.getIndex());
            // 默认设置为水平居中
            WriteCellStyle contentWriteCellStyle = new WriteCellStyle();
            contentWriteCellStyle.setFillForegroundColor(IndexedColors.WHITE.getIndex());
            contentWriteCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
            contentWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);
            contentWriteCellStyle.setBorderBottom(BorderStyle.THIN);
            contentWriteCellStyle.setBorderLeft(BorderStyle.THIN);
            contentWriteCellStyle.setBorderRight(BorderStyle.THIN);
            contentWriteCellStyle.setBorderTop(BorderStyle.THIN);

            // 这里需要设置不关闭流
            EasyExcel.write(response.getOutputStream(), Jglkq.class)
                    //.autoCloseStream(Boolean.FALSE).registerWriteHandler(horizontalCellStyleStrategy)
                    .sheet("考勤结果明细查询")
                    .relativeHeadRowIndex(1)
                     //设置拦截器或自定义样式
                    .registerWriteHandler(new MonthSheetWriteHandler())
                    .registerWriteHandler(new HorizontalCellStyleStrategy(headWriteCellStyle,contentWriteCellStyle))
                    .doWrite(kqList);

        } catch (IOException e) {
            e.printStackTrace();
        }
    }



}

4、在拦截器中对表头的样式进行自定义的覆盖文章来源地址https://www.toymoban.com/news/detail-801351.html

package com.huawei.common.utils.poi;
import com.alibaba.excel.write.handler.SheetWriteHandler;
import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
import com.alibaba.excel.write.metadata.holder.WriteWorkbookHolder;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddress;

/**
 * @description:  表头设置拦截器
 * @author: yeyong
 * @create: 2024-01-17
 */
public class MonthSheetWriteHandler implements SheetWriteHandler {

    @Override
    public void afterSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder)   {
        Workbook workbook = writeWorkbookHolder.getWorkbook();
        Sheet sheet = workbook.getSheetAt(0);
        Row row1 = sheet.createRow(0);
        row1.setHeight((short) 800);
        Cell cell = row1.createCell(0);
        //设置标题
        cell.setCellValue("考勤结果明细查询" );
        CellStyle cellStyle = workbook.createCellStyle();
        cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
        cellStyle.setAlignment(HorizontalAlignment.CENTER);
        Font font = workbook.createFont();
        font.setBold(true);
        font.setFontHeight((short) 400);
        font.setFontName("宋体");
        cellStyle.setFont(font);
        cell.setCellStyle(cellStyle);
        sheet.addMergedRegionUnsafe(new CellRangeAddress(0, 0, 0, 15));
    }

}

到了这里,关于使用easyexcel 导出多级表头demo的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • EasyExcel本地导出正常,服务器导出报错:java.lang.NoClassDefFoundError: Could not initialize class sun.awt.X11FontMa

    今天又是掉坑的一天,本地代码和dev环境同步了好几次,数据也同步了,本地可以正常导出,但是dev环境就是不行,崩溃… 先说一下异常内容: 原因:由于dev环境是在docker容器中部署的,所以导出时容器会对字体进行解析,如果部分字体无法解析会导致内容渲染失败,导出

    2024年02月20日
    浏览(45)
  • EasyExcel解析动态表头及导出

    前言 excel文件导入及导出,是日常开发中经常遇到的需求。本次笔者以EasyExcel为例,针对在项目中遇到的 动态表头解析及导出 的场景,详细介绍具体的代码实现过程。 参考地址 https://github.com/alibaba/easyexcel 前端下载 模板下载 excel文件导入功能,常常需要进行模板下载,在

    2023年04月09日
    浏览(28)
  • EasyExcel复杂表头导出(一对多)升级版

            在之前写的 EasyExcel复杂表头导出(一对多)的博客的结尾,受限于当时的能力和精力,留下一些问题及展望。现在写下此博客,目的就是解决之前遗留的问题。         背景介绍,见上述链接指向的博客,这里主要通过 自定义拦截器 的形式来完美解决。 对于图

    2024年02月06日
    浏览(47)
  • poi+easypoi实现表头多层循环,多级动态表头、树形结构动态表头、纵向合并单元格、多个sheet导出

    我前面也写过几篇关于easypoi复杂表格导出的文章,什么一对多纵向合并、多级表头、动态表头、多个sheet等,这些我写那几篇文章之前做项目都遇到过,并且都实现出来了。 感兴趣的可以看看: easypoi多级表头、多个sheet导出,动态导出列、动态更改表头 easypoi一对多,纵向合

    2024年02月08日
    浏览(33)
  • 前端vue+elementui导出复杂(单元格合并,多级表头)表格el-table转为excel导出

    需求 :前端对el-table表格导出 插件 : npm install xlsx -S npm install file-saver --save 原理 :直接导出el-table的表格里面的数据,这样就会存在缺点,只会导出当前页面的数据,如果需要导出全部数据,可以自己重新渲染一个全部数据不可见的el-table表格,来导出就可以了 扩展 :经过

    2024年02月04日
    浏览(54)
  • 【EasyExcel】导出excel冻结表头和冻结指定列并支持筛选器

    需求背景:         导出excel的同时冻结表头和前两列基础信息,方便导出后用户查看信息。 一、技术选型:         easyExcel的自定义写策略处理:SheetWriteHandler 二、方案设计:(基于实现 SheetWriteHandler 接口)         1、重写afterSheetCreate(WriteWorkbookHolder writeWorkbookHolder,

    2024年01月24日
    浏览(33)
  • 阿里EasyExcel快速导出demo

    引入阿里easyExcel依赖 自定义的阿里easyexcel拦截器方法 自定义的EasyExcelUtils方法类 调用示例

    2024年02月12日
    浏览(31)
  • Java 使用 EasyExcel 实现导入导出(新手篇教程)

    官网镇楼↓,觉得我写的不好的同学可以去官网看哦 EasyExcel 示例: 如上一个简易 Excel 表格,表头占了两行,且第三列开始才为有效数据,那么我们应该如何导入? 建造实体类 首先无论是导入还是导出,都需要先建对应的实体类  如图所示,因为我的示例 Excel 一共需要读

    2024年04月17日
    浏览(31)
  • Java——使用EasyExcel导出动态列的Excel

    多多点赞,会变好看! 多多留言,会变有钱! 有些时候列表的列可能是动态的,需要根据动态表头导出Excel文件,这时候可以使用下面的方法解决: 静态列导出代码:

    2024年02月15日
    浏览(38)
  • java实现excel的导出之使用easyExcel

    在我们的项目需求中,经常会遇到导出的需求,其中excel的导出最为常见。生成Excel比较有名的框架有Apache poi,jxl等,但他们都存在一个严重的问题就是非常的耗内存,如果你的系统并发量不大的话可能还行,但是一旦并发上来后一定会OOM或者JVM频繁的full gc. EasyExcel是阿里巴巴

    2024年02月15日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包