Easyexcel 3.1.1版本动态表头样式

2023-10-26

需求:动态生成的表头 key:value的形式 List<List>这样的形式。

依赖

<dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel</artifactId>
            <version>3.1.1</version>
            <exclusions>
                <exclusion>
                    <groupId>javax.servlet</groupId>
                    <artifactId>servlet-api</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.apache.poi</groupId>
                    <artifactId>poi</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.apache.poi</groupId>
                    <artifactId>poi-ooxml</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.apache.poi</groupId>
                    <artifactId>poi-ooxml-schemas</artifactId>
                </exclusion>
            </exclusions>

        </dependency>

        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>4.1.2</version>
        </dependency>

数据形式

		 List<List<String>> dataList=new ArrayList<>();
        List<String> data=new ArrayList<>();
        data.add("项目编号");data.add(info.getProjectCode());
        dataList.add(data);
        List<String> data2=new ArrayList<>();
        data2.add("项目名称");data2.add(info.getProjectName());
        dataList.add(data2);
        List<String> data3=new ArrayList<>();
        data3.add("方案编号");data3.add(StrUtil.isNotEmpty(info.getSchemeCode())?info.getSchemeCode():"");
        dataList.add(data3);
        List<String> data4=new ArrayList<>();
        data4.add("研究分期");data4.add(StrUtil.isNotEmpty(info.getStudyAging())?info.getStudyAging():"");
        dataList.add(data4);
        List<String> data5=new ArrayList<>();
        data5.add("研究产品");data5.add(StrUtil.isNotEmpty(info.getStudyProduct())?info.getStudyProduct():"");
        dataList.add(data5);
        List<String> data6=new ArrayList<>();
        data6.add("项目经理");data6.add(StrUtil.isNotEmpty(info.getMainPM())?info.getMainPM():"");
        dataList.add(data6);

主要代码;

正常导出即可;添加一个样式注册器;

public class DynamicHeadHorizontalCellStyleStrategy  extends AbstractVerticalCellStyleStrategy  {




    @Override
    protected WriteCellStyle contentCellStyle(CellWriteHandlerContext context) {
     // 因为我这里只在第一列添加 样式 所以我判断是否第一列
        Integer columnIndex = context.getColumnIndex();
       
        // 获取样式实例
        WriteCellStyle contentWriteCellStyle = new WriteCellStyle();

        // 设置字体
        WriteFont contentWriteFont = new WriteFont();
        if(columnIndex==0){ 
            contentWriteFont.setColor(IndexedColors.WHITE1.getIndex());
        }
        contentWriteFont.setFontHeightInPoints((short) 12);//设置字体大小
        contentWriteFont.setFontName("宋体"); //设置字体名字
        contentWriteCellStyle.setWriteFont(contentWriteFont);//在样式用应用设置的字体;
        //设置样式;
        contentWriteCellStyle.setBorderBottom(BorderStyle.THIN);//设置底边框;
        contentWriteCellStyle.setBottomBorderColor((short) 0);//设置底边框颜色;
        contentWriteCellStyle.setBorderLeft(BorderStyle.THIN);  //设置左边框;
        contentWriteCellStyle.setLeftBorderColor((short) 0);//设置左边框颜色;
        contentWriteCellStyle.setBorderRight(BorderStyle.THIN);//设置右边框;
        contentWriteCellStyle.setRightBorderColor((short) 0);//设置右边框颜色;
        contentWriteCellStyle.setBorderTop(BorderStyle.THIN);//设置顶边框;
        contentWriteCellStyle.setTopBorderColor((short) 0); ///设置顶边框颜色;

        contentWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);// 水平居中
        contentWriteCellStyle.setWrapped(true); //设置自动换行;
        contentWriteCellStyle.setShrinkToFit(true);//设置文本收缩至合适
        if(columnIndex==0){
            contentWriteCellStyle.setFillForegroundColor(IndexedColors.BLUE_GREY.getIndex());
          //  contentWriteCellStyle.setFillBackgroundColor(IndexedColors.BLUE_GREY.getIndex());
            contentWriteCellStyle.setFillPatternType(FillPatternType.SOLID_FOREGROUND);
        }
        return contentWriteCellStyle;
    }

}

导出结果;
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Easyexcel 3.1.1版本动态表头样式 的相关文章

随机推荐

  • 二叉树结构与算法思路解析

    二叉树 介绍 主要内容 二叉树的概念和性质 二叉树的存储结构 遍历二叉树 递归遍历 非递归遍历 线索二叉树 哈夫曼树 树和森林 树和森林的存储 树和森林与二叉树的转换 树和森林的遍历 树型结构特点 一对多 例 自然界 树 人类社会 家谱 新
  • 一次线性回归拟合、二次线性回归拟合

    器学习一次回归和二次回归 reshape 行 列 可以根据指定的数值将数据转换为特定的行数和列数 reshape 1 1 之后 数据集变成了一列 采用线性回归方程预测 lr LinearRegression lr fit X y from
  • 重复元素判定续。利用集合的无重复性改编上一个程序,获得一个更快更简洁的版本

    ls eval input 请输入一个列表 if ls list set ls print True
  • Java基础(二)——数组、类和对象

    一 数组 1 声明并创建数组 数据类型 数组名 new 数据类型 大小 2 新生成的数组对象 其中所有的引用自动初始化为null 基本数据类型 数值型自动初始化为0 字符型为0 布尔型为false 3 数组赋值方法 1 边声明边赋值 静态初
  • map.get(key)空指针异常_NPE空指针异常总结

    一 java lang NullPointerException出现的几种原因 1 字符串变量未初始化 2 接口类型的对象没有用具体的类初始化 比如 Map map 会报错 Map map new Map 则不会报错了 3 当一个对象的值为
  • uniapp点击事件修改元素样式

    1 要有一个dom元素 用ref绑定 2 获取到dom元素并操作样式
  • 相机坐标系的正向投影和反向投影

    1 正向投影 世界坐标系到像素坐标系 世界3D坐标系 x y z 到图像像素坐标 u v 的映射过程 1 世界坐标系到相机坐标系的映射 两个坐标系的转换比较简单 就是旋转矩阵 平移矩阵 旋转矩阵则是绕X Y Z 轴旋转获得 R 属于世界坐标
  • 网络文件共享服务主流----FTP文件传输协议

    网络文件共享服务主流 FTP文件传输协议 ftp定义 ftp数据连接模式 ftp应用程序 vsftpd vsftpd虚拟用户配置 网络文件共享服务主流 FTP文件传输协议 ftp定义 文件传输协议 File Transfer Protoco
  • 用java实现拷贝目录以及目录下文件

    用java实现拷贝目录以及目录下文件 创建一个File对象 也可以说是确定一个文件对象 File f1 new File D file 就相当于获取了这个文件对象 不管这个对象是否真实存在 对文件操作 所以方法里调用的都是File对象 如果
  • 线性代数 --- 置换矩阵 (Permutation matrix)

    置换矩阵就是重新排列后的单位矩阵 对一个矩阵进行行交换 需要通过置换矩阵 permutation matrix 来完成 在对一个Ax b的方程组进行高斯消元的过程中 我们常常会遇到一种情况 也就是消元消不下去的情况 下面 我列出了两个不同的
  • win10下cmder加wsl的多终端配置使用

    win10下cmder加wsl的多终端配置使用 版本说明 版本 作者 日期 备注 0 1 ZY 2020 1 21 初稿 文章目录 win10下cmder加wsl的多终端配置使用 版本说明 一 初衷 二 cmder和wsl 1 cmder
  • Matlab 自相关检测 :自相关函数xcorr

    原文 http blog chinaunix net uid 26275986 id 4342906 html 最近因为工作的关系需要使用matlab作为数据统计的工具 其中一个关键是使用其自相关函数获得数据的估计 自己只在本科时候马马虎虎
  • 易优cms 模板制作教程

    易优cms静态页面编写需要导航条 新闻列表等页面内容信息 在制作模板的时候就用标签来代替 模板标签就是后台设置的数据 所以模板标签你必须得熟悉 你可以看看模板标签大全有哪些标签可以使用 也务必要完全理解本文内容 否则你将不知道怎么使用模板标
  • 免费截图标注贴图工具:Snipaste

    每一次看课 都很羡慕老师能把截图贴在屏幕上 然后能在贴图上写写画画 还不影响你执行其他的电脑操作 超级赞 最最重要的是 贴图功能很适合程序员进行代码比对 效果图比对等 官网下载 Snipaste 解压缩到同名文件夹即可 双击exe文件运行
  • C++ - if 、else、else_if 语句

    C 中的 if else if else 是非常基础的东西 这里需要知道一个东西 大括号 一定要是成对出现 格式为 if 判断语句 如果判断语句成立 运行 如果判断语句不成立 跳过 if 语句 else 如果判断语句不成立 运行 如果判断语
  • 渗透测试-SQL注入之宽字节注入

    SQL注入之宽字节注入 文章目录 SQL注入之宽字节注入 前言 一 什么是宽字节注入 二 宽字节注入获取数据库信息 1 宽字节注入方法 2 宽字节注入防御方法 总结 前言 一 什么是宽字节注入 宽字节是相对于ascII这样单字节而言的 像
  • 信息管理毕业设计 SSM的小区车位出租管理系统(源码+论文)

    文章目录 1 前言 2 实现效果 3 设计方案 4 最后 1 前言 这两年开始毕业设计和毕业答辩的要求和难度不断提升 传统的java web缺少创新和亮点 往往达不到毕业答辩的要求 这两年不断有学弟学妹告诉学长自己做的java web管理系
  • python中pandas库查看数据分布的基本用法

    1 最大值 最小值 平均值 如何在Python中查看pandas dataframe对象列的最大值 最小值 平均值 标准差 中值等 PandasDataFrame 中位数 Python统计大文本行数
  • 设置VLC播放器进行RTSP推流视频

    设置VLC播放器进行RTSP推流视频 一 推流与拉流概念 二 设置推流端 三 设置拉流端 播放端 VLC官网 https www videolan org 一 推流与拉流概念 首先 做几个名词解释 推流 指的是把采集阶段封包好的内容传输到服
  • Easyexcel 3.1.1版本动态表头样式

    需求 动态生成的表头 key value的形式 List