首页 > 其他分享 >EasyExcel 自定义表头颜色

EasyExcel 自定义表头颜色

时间:2024-07-01 17:19:38浏览次数:14  
标签:dto 自定义 rowIndex EasyExcel 表头 public result new response

 public void export(ObjectDTO dto, HttpServletResponse response) {
        try {
            if (ObjectUtils.isEmpty(dto.getObjNumberList())) {
                throw new BusinessException("编号不允许为空");
            }
            ListResp result = objectService.getListResp(dto);
            if (ObjectUtils.isEmpty(result) || ObjectUtils.isEmpty(result.getList())) {
                return;
            }
            dto.getColumnList().addAll(getRequiredColumnList());
            String encodedFileName = URLEncoder.encode(LocalDate.now().toString() + "-" + dto.getSheetName() + ".xlsx", "UTF-8");
            List<T> writeList = convertMapToList(result.getList(), this.entityClass);
            response.setContentType("application/vnd.ms-excel");
            response.setCharacterEncoding("UTF-8");
            response.setHeader("Access-Control-Expose-Headers", "Content-disposition");
            response.setHeader("Content-disposition", "attachment;filename=" + encodedFileName + "");
            // 自定义策略
            Set<Integer> yellowRowsSet = new HashSet<>(getRequiredColumnIndex());
            ObjCellWriteHandler seedDemandCellWriteHandler = new ObjCellWriteHandler(yellowRowsSet);
            // 导出 Excel 文件
            EasyExcel.write(response.getOutputStream(), this.entityClass)
                    .sheet(dto.getSheetName())
                    .includeColumnFiledNames(dto.getColumnList())
                    .registerWriteHandler(new CustomCellWriteWidthHandle()) /*自适应列宽*/
                    .registerWriteHandler(seedDemandCellWriteHandler)
                    .doWrite(writeList);
        } catch (Exception e) {
            e.printStackTrace();
            log.error("对象导出异常,{}", e);
        }
    }
public class ObjCellWriteHandler  implements CellWriteHandler {

    /**
     * 导出字段索引
     */
    private final Set<Integer> rowIndex;

    public ObjCellWriteHandler(Set<Integer> rowIndex) {
        this.rowIndex = rowIndex;
    }

    @Override
    public void afterCellDispose(CellWriteHandlerContext context) {
        // 判断当前行是否在yellowRowIndex's中
        if (context.getHead() && rowIndex.contains(context.getColumnIndex())) {
            // 设置背景颜色,也可以设置字体等其它元素
            WriteCellData<?> cellData = context.getFirstCellData();
            WriteCellStyle writeCellStyle = cellData.getOrCreateStyle();
            writeCellStyle.setFillForegroundColor(IndexedColors.YELLOW.getIndex());
            writeCellStyle.setFillPatternType(FillPatternType.SOLID_FOREGROUND);
        }
    }
}

 

标签:dto,自定义,rowIndex,EasyExcel,表头,public,result,new,response
From: https://www.cnblogs.com/deepalley/p/18278485

相关文章

  • 自定义vue3 hooks
    文章目录hooks目录结构demohooks当页面内有很多的功能,js代码太多,不好维护,可以每个功能都有写一个js或者ts,这样的话,代码易读,并且容易维护,组合式setup写法与此结合......
  • springboot-javax.validation编写自定义校验注解
    引入依赖:<!--jsr303--><dependency><groupId>javax.validation</groupId><artifactId>validation-api</artifactId><version>1.1.0.Final</version></dependency><!--hibernatevalidator--><depen......
  • ros micro-ros 自定义消息接口
    本节课最终效果是:通过自定义的服务接口控制开发板上的OLED显示器的内容。ros2servicecall/oled_controlfishbot_interfaces/srv/OledControl"{px:0,py:0,data:'oledcontrolbyservice~'}" 一、新建工程添加依赖新建example14_custom_interface,注意请不要将工......
  • QT 使用Q_PLUGIN_METADATA实现自定义插件
    1.创建一个继承自QObject的类,并在类的实现文件中使用Q_PLUGIN_METADATA宏定义插件的元数据信息。这个宏通常包含插件的元数据,如插件的标识符、版本号等。2.在插件项目的.pro文件中添加QT += core gui widgets以确保能够使用Qt的相关功能。3.在主应用程序中使用QPluginLoade......
  • 最新AIGC系统源码-ChatGPT商业版系统源码,自定义ChatGPT指令Promp提示词,AI绘画系统,AI换
    目录一、前言系统文档二、系统演示核心AI能力系统快速体验三、系统功能模块3.1AI全模型支持/插件系统AI模型提问文档分析​识图理解能力3.2GPts应用3.2.1GPTs应用3.2.2GPTs工作台3.2.3自定义创建Promp指令预设应用3.3AI专业绘画3.3.1文生图/图生图(垫图)......
  • Dubbo 如何自定义协议为业务通信带来扩展
    Solomon_肖哥弹架构跟大家“弹弹”Dubbo自定义协议扩展欢迎点赞,收藏,关注。关注本人的公众号Solomon肖哥弹架构获取更多精彩内容Dubbo自定义协议扩展1、扩展说明RPC协议扩展,封装远程调用细节。契约:当用户调用refer()所返回的Invoker对象的invoke()方法......
  • SpringBoot自定义注解实现接口幂等
    一、前言接口幂等就是对一个接口执行重复的多次请求,与一次请求所产生的结果是相同的。对数据库的查询和删除是天然幂等的,更新操作在大多数场景下也是天然幂等。插入大多数情况下都是非幂等的,除非利用数据库的唯一索引来保证数据不会重复保存。二、为什么需要幂等1.超时重试......
  • 全网最适合入门的面向对象编程教程:06 类和对象的Python实现-自定义类的数据封装
    全网最适合入门的面向对象编程教程:06类和对象的Python实现-自定义类的数据封装摘要:本文我们主要介绍了数据封装的基本概念和特性,如何设置自定义类的私有属性和私有方法,protect属性的概念和特点。往期推荐:学嵌入式的你,还不会面向对象??!全网最适合入门的面向对象编程教程:00......
  • 53、Flink 测试工具测试用户自定义函数详解
    1.测试用户自定义函数a)单元测试无状态、无时间限制的UDF示例:无状态的MapFunction。publicclassIncrementMapFunctionimplementsMapFunction<Long,Long>{@OverridepublicLongmap(Longrecord)throwsException{returnrecord+1;}......
  • Cesium 实战 - 自定义纹理材质系列之 - 涟漪效果
    Cesium实战-自定义纹理材质系列之-涟漪效果核心代码完整代码在线示例Cesium给实体对象(Entity)提供了很多实用的样式,基本满足普通项目需求;但是作为WebGL引擎,肯定不够丰富,尤其是动态效果样式。对于实体对象(Entity),可以通过自定义材质,实现各种动态效果,虽......