easyExcel如何实现自定义标题,前两个(多个)标题占满一行,最后标题有规律

news2024/11/17 7:52:16

实现效果
在这里插入图片描述
实现方式
1,标题:

@Data
public class ExportPurchaseSortingCustDto {
    /** 序号 */
    @ExcelProperty(value ={"${bigHead}","${dateHead}","序号"},index = 0)
    @ApiModelProperty(value = "序号")
    private int sort;

    /** 商品条码 */
    @ExcelProperty(value ={"${bigHead}","${dateHead}","商品条码"},index = 1)
    @ApiModelProperty(value = "商品条码")
    private String itemCode;

    /** 商品名称 */
    @ExcelProperty(value ={"${bigHead}","${dateHead}","商品名称"},index = 2)
    @ApiModelProperty(value = "商品名称 ")
    private String itemName;

    /** 订货单位 */
    @ExcelProperty(value ={"${bigHead}","${dateHead}","商品单位"},index = 3)
    @ApiModelProperty(value = "商品单位")
    private String unitName;


    /** 订货数量(含赠送量) */
    @ExcelProperty(value ={"${bigHead}","${dateHead}","订货总数量"},index = 4)
    @ApiModelProperty(value = "订货总数量")
    private BigDecimal salesQty;

    /** 分拣数量 */
    @ExcelProperty(value ={"${bigHead}","${dateHead}","配送总数量"},index = 5)
    @ApiModelProperty(value = "配送总数量")
    private BigDecimal outQty;
}

2,标题处理,写个配置类

public class ExcelTitleHandler implements CellWriteHandler {
    /**
     错误信息处理时正则表达式的格式
     */
    private final String EXCEL_ERROR_REG = "^(.*)(\\(错误:)(.*)(\\))$";

    private String bigHead;

    private String dateHead;

    PropertyPlaceholderHelper placeholderHelper = new PropertyPlaceholderHelper("${", "}");

    public ExcelTitleHandler( String bigHead,String dateHead) {
        this.bigHead = bigHead; //表头1
        this.dateHead = dateHead;  //表头2
    }

    @Override
    public void beforeCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Row row, Head head, Integer columnIndex, Integer relativeRowIndex, Boolean isHead) {
        // 动态设置表头字段
        if (!ObjectUtil.isEmpty(head)) {
            List<String> headNameList = head.getHeadNameList();
            if (CollectionUtil.isNotEmpty(headNameList)) {
                Properties properties = new Properties();
                properties.setProperty("bigHead", bigHead);
                properties.setProperty("dateHead", dateHead);
                for (int i = 0 ; i < headNameList.size() ; i++){
                    // 循环遍历替换
                    headNameList.set(i, placeholderHelper.replacePlaceholders(headNameList.get(i), properties));
                }
            }
        }
    }
    @Override
    public void afterCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Cell cell, Head head, Integer relativeRowIndex, Boolean isHead) {
    }
    @Override
    public void afterCellDispose(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, List<WriteCellData<?>> cellDataList, Cell cell, Head head, Integer relativeRowIndex, Boolean isHead) {
    }
}

3:业务逻辑代码处理

@Override
    public void exportPurchaseItemSorting(HttpServletResponse response,sortingReq sortingReq){
        
        String purchaseNo = getSortingReq.getPurchaseNo();
        String deliverDate = "";
        List<ExportPurchaseSortingCustDto> list = new ArrayList<>();
        int sort =1;
      //各种业务处理
        String dateHead = "";
        try {
            response.setContentType("application/vnd.ms-excel");
            response.setCharacterEncoding("utf-8");
            response.setHeader("Content-disposition", "attachment;filename=" + "采购商品汇总导出" + ".xlsx");
            WriteCellStyle contentWriteCellStyle = new WriteCellStyle();
            contentWriteCellStyle.setBorderLeft(BorderStyle.THIN);//细实线
            contentWriteCellStyle.setBorderTop(BorderStyle.THIN);
            contentWriteCellStyle.setBorderRight(BorderStyle.THIN);
            contentWriteCellStyle.setBorderBottom(BorderStyle.THIN);
            contentWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);
            WriteCellStyle headWriteCellStyle = new WriteCellStyle();
            headWriteCellStyle.setBorderLeft(BorderStyle.THIN);//细实线
            headWriteCellStyle.setBorderTop(BorderStyle.THIN);
            headWriteCellStyle.setBorderRight(BorderStyle.THIN);
            headWriteCellStyle.setBorderBottom(BorderStyle.THIN);
            //设置头部标题居中
            headWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);
            // 这个策略是 头是头的样式 内容是内容的样式 其他的策略可以自己实现
            HorizontalCellStyleStrategy horizontalCellStyleStrategy =
                    new HorizontalCellStyleStrategy(headWriteCellStyle, contentWriteCellStyle);

            EasyExcel.write(response.getOutputStream(), ExportPurchaseSortingCustDto.class)
                    //插入数据
                    .sheet("汇总")
                    .registerWriteHandler(new ExcelTitleHandler("sss",dateHead))
                    .registerWriteHandler(new SimpleColumnWidthStyleStrategy(20)).registerWriteHandler(horizontalCellStyleStrategy)
                    .doWrite(list);
        }catch (Exception e){
            throw new BizException(BizExceptionEnum.CHECK_ERROR,"导出失败!");
        }
    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/838190.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

RAFT:Recurrent All-Pairs Field Transforms for Optical Flow

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 Abstract1 Introduction2 Related WorkOptical Flow as Energy Minimization 3 Approach3.1 Feature Extraction3.2 Computing Visual Similarity Abstract 光流学…

RISC-V基础之浮点指令(包含实例)

RISC-V体系结构定义了可选的浮点扩展&#xff0c;分别称为RVF、RVD和RVQ&#xff0c;用于操作单精度、双精度和四倍精度的浮点数。RVF/D/Q定义了32个浮点寄存器&#xff0c;f0到f31&#xff0c;它们的宽度分别为32位、64位或128位。当一个处理器实现了多个浮点扩展时&#xff0…

企业人力资源管理系统servlet+jsp人事招聘培训薪资java源代码mysql

本项目为前几天收费帮学妹做的一个项目&#xff0c;Java EE JSP项目&#xff0c;在工作环境中基本使用不到&#xff0c;但是很多学校把这个当作编程入门的项目来做&#xff0c;故分享出本项目供初学者参考。 一、项目描述 企业人力资源管理系统servletjsp 系统1权限&#xff…

基于面向对象基础设计——里氏替换原则

在Java中&#xff0c;支持抽象和多态的关键机制之一是继承。正是使用了继承&#xff0c;我们才可以创建实现父类中抽象方法的子类。那么&#xff0c;是什么规则在支配着这种特殊的继承用法呢&#xff1f;最佳的继承层次的特征又是什么呢&#xff1f;在什么情况下会使我们创建的…

Python中的copy和deepcopy

一、定义 浅拷贝&#xff1a;创建一个新的对象&#xff0c;不拷贝内部子对象&#xff0c;只拷贝子对象的引用。这意味着&#xff0c;如果原对象的子对象发生变化&#xff0c;拷贝后的对象也会受到影响。 深拷贝&#xff1a;创建一个新的对象&#xff0c;并递归地拷贝原对象的所…

删除这4个文件夹,流畅使用手机无忧

在现代社会中&#xff0c;手机已经成为我们生活中不可或缺的一部分。然而&#xff0c;随着使用时间的增长&#xff0c;我们可能会遇到手机卡顿和内存不足的问题&#xff0c;让我们感到十分困扰。手机卡顿不仅影响使用体验&#xff0c;还可能导致应用程序运行缓慢&#xff0c;甚…

简单高效,教你如何制作食品小程序商城

食品行业的发展越来越繁荣&#xff0c;为了满足人们对食品的需求&#xff0c;许多商家都开始转向线上销售。而制作一个食品小程序商城&#xff0c;不仅可以提高销售效率&#xff0c;还可以增加用户粘性。下面&#xff0c;我们就来详细介绍如何制作食品小程序商城。 首先&#x…

python日志logging的用法

python日志看起比较简单&#xff0c;要用起来稍微有点复杂&#xff0c;基础用法网上也介绍得比较多&#xff0c;下面就最近遇见的问题&#xff0c;作一个简单的介绍。就是在两个以上的python文件中要记录日志&#xff0c;怎么才能实现在一个地方配置&#xff0c;多个地方使用的…

11.函数递归与迭代

递归与迭代 1.什么是递归&#xff1f;2.递归的限制条件3.递归举例3.1 求n的阶乘3.2 顺序打印一个整数的每一位 4.递归与迭代4.1 求第n个斐波那契数&#xff08;递归 不推荐&#xff09;4.2 求第n个斐波那契数&#xff08;迭代 推荐&#xff09;4.3 总结 1.什么是递归&#xff1…

奥威BI—数字化转型首选,以数据驱动企业发展

奥威BI系统BI方案可以迅速构建企业级大数据分析平台&#xff0c;可以将大量数据转化为直观、易于理解的图表和图形&#xff0c;推动和促进数字化转型的进程&#xff0c;帮助企业更好地了解自身的运营状况&#xff0c;及时发现问题并采取相应的措施&#xff0c;提高运营效率和质…

使用socket实现UDP版的回显服务器

文章目录 1. Socket简介2. DatagramSocket3. DatagramPacket4. InetSocketAddress5. 实现UDP版的回显服务器 1. Socket简介 Socket&#xff08;Java套接字&#xff09;是Java编程语言提供的一组类和接口&#xff0c;用于实现网络通信。它基于Socket编程接口&#xff0c;提供了…

【测试学习五】测试类型的划分(重点:白盒与黑盒测试)

目录 一、测试类型的分类 1、按测试对象划分 2、是否查看代码划分&#xff08;重点&#xff09; &#x1f337;&#xff08;1&#xff09;黑盒测试 &#x1f337;&#xff08;2&#xff09;白盒测试 &#x1f337;&#xff08;3&#xff09;灰盒测试 3、按照开发阶段划…

JVM分析工具JProfiler介绍及安装

目录 一、什么是JProfiler&#xff1f; 二、JProfiler 功能结构 1、分析代理 2、记录数据 3、快照 三、安装 一、什么是JProfiler&#xff1f; JProfiler是一个专业的工具&#xff0c;用于分析运行中的JVM内部发生的事情。当您的生产系统出现问题时&#xff0c;您可以…

FileZilla Server同时共享多个目录(手把手教你使用FileZilla Server同时设置多个目录)

网上的基本全是一句话带过怎么共享多个目录&#xff0c;没图很烦&#xff0c;所以我自己就写一个过程 目录 1、创建ftp用户并设置密码 1.1、进入用户管理 1.2、新建用户 1.3、设置密码 2、添加共享的目录 2.1、选择用户添加目录 2.2、给予用户访问权限 2.2.1、客户端访…

小程序服务器配置多大够用?

​  了解小程序服务器的大小和要求对于确保小程序的高效运行非常重要。下面将介绍小程序服务器的大小和要求&#xff0c;帮助您选择合适的服务器。 服务器费用 服务器费用因服务器类型、配置和带宽等因素而异。一般而言&#xff0c;小型小程序服务器的年费用在500元至2000元之…

SpringCloud之微服务API网关Gateway介绍

文章目录 1 微服务API网关Gateway1.1 网关简介1.2 Spring Cloud Gateway介绍1.3 Gateway特性1.4 Gateway核心概念1.4.1 路由1.4.1.1 定义1.4.1.2 动态路由 1.4.2 断言1.4.2.1 默认断言1.4.2.2 自定义Predicate 1.4.3 过滤器1.4.3.1 默认过滤器1.4.3.2 自定义Filter&#xff08;…

2023年第三届工业自动化、机器人与控制工程国际会议 | IET独立出版 | EI检索

会议简介 Brief Introduction 2023年第三届工业自动化、机器人与控制工程国际会议&#xff08;IARCE 2023&#xff09; 会议时间&#xff1a;2023年10月27 -30日 召开地点&#xff1a;中国成都 大会官网&#xff1a;www.iarce.org 2023年第三届工业自动化、机器人与控制工程国际…

【DMA】认识 DMA 及其工作流程

DMA&#xff08;Direct Memory Access&#xff09;&#xff0c;字面意思“直接访问内存”&#xff0c;无需 CPU 干预直接读写内存。传统CPU读写数据时&#xff0c;需要先将要使用的数据保存到 RAM&#xff0c;等要用时再从RAM 加载。 目录 一、传统CPU存取数据 二、认识DMA …

安防视频监控汇聚平台EasyCVR接入Ehome告警,公网快照不显示是什么原因?

智能视频监控汇聚平台TSINGSEE青犀视频EasyCVR可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等&#xff0c;视频监控管理平台…

openCV图像读取和显示

文章目录 一、imread二、namedWindow三、imshow #include <opencv2/opencv.hpp> #include <iostream>using namespace std; using namespace cv;int main(int argc,char** argv) {cv::Mat img imread("./sun.png"); //3通道 24位if (img.empty()) {std:…