EasyExcel 自适应列宽、隐藏列、动态列、单元格下拉框选择数据、单元格文本格式

news/2024/7/21 6:27:32 标签: excel, EasyExcel

前言

项目中用到EasyExcel读写Excel,用到了一下功能,这里做个笔记:

  1. 列宽自适应:自适应宽度
  2. 隐藏列:隐藏某些列
  3. 动态列:固定列 + 动态的生成Excel列
  4. 单元格下拉框选择数据:设计单元格下拉数据,并且加校验
  5. 单元格文本格式:设置文本格式

EasyExcel 版本:3.0.x

EasyExcel官方文档

核心代码实现

  • 列宽自适应: 注册一个EasyExcel内置的宽度策略对象即可
.registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())
  • 动态列:这里使用的 List 集合
List<List<String>> heads = new ArrayList<>();
List<String> head0 = new ArrayList<>();
// 固定列
head0.add("ID");
heads.add(head0);
List<String> head1 = new ArrayList<>();
head1.add("Name");
heads.add(head1);
// 动态列
for (xxx) {
	List<String> dnys = new ArrayList<>();
	dnys.add("Colxx");
	heads.add(.);
}
List<String> end = new ArrayList<>();
end.add("End");
heads.add(end);

// 设置列
EasyExcel.write(out).head(heads)
  • 单元格下拉框选择数据:注册一个SheetWriteHandler接口实现类 afterSheetCreate 方法,这里使用匿名内部类。
.registerWriteHandler(
    new SheetWriteHandler() {
        @Override
        public void afterSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) {
            Sheet sheet = writeSheetHolder.getSheet();
            DataValidationHelper helper = sheet.getDataValidationHelper();
            // 设置下拉列表单元格的位置首行 末行 首列 末列
            CellRangeAddressList rangeList = new CellRangeAddressList(firstRow, lastRow, firstCol, lastCol);
            // 设置下拉列表的值:strArr 为字符串数组,下拉框的值
            DataValidationConstraint constraint = helper.createExplicitListConstraint(strArr);
            // 设置错误提示
            DataValidation validation = helper.createValidation(constraint, rangeList);
            // 非下拉选项的值不能输入
            validation.setErrorStyle(DataValidation.ErrorStyle.STOP);
            validation.setSuppressDropDownArrow(true);
            validation.setShowErrorBox(true);
            validation.createErrorBox("提示", "请选择/输入下拉选项中的值");
            sheet.addValidationData(validation);
        }
    }
)
  • 单元格隐藏、单元格文本格式:注册一个CellWriteHandler,覆盖afterCellDispose方法,这里使用匿名类
.registerWriteHandler(new CellWriteHandler() {
    @Override
    public void afterCellDispose(CellWriteHandlerContext context) {
        // 设置隐藏列
        context.getWriteSheetHolder().getSheet().setColumnHidden(0, true);
        for (WriteCellData<?> writeCellData : context.getCellDataList()) {
            // 设置文本格式
            DataFormatData dataFormatData = new DataFormatData();
            dataFormatData.setIndex((short) 49);
            writeCellData.getOrCreateStyle().setDataFormatData(dataFormatData);
        }
    }
})

最后指定sheet名称,写入数据即可。

.sheet("导入").doWrite(datas)

http://www.niftyadmin.cn/n/5395903.html

相关文章

设计模式-桥接模式(C++)

C中可以通过使用抽象类和接口来实现桥接模式。桥接模式是一种结构型设计模式&#xff0c;它将抽象部分与实现部分分离&#xff0c;使它们可以独立地变化。 在C中实现桥接模式的步骤如下&#xff1a; 1. 定义抽象类&#xff08;或接口&#xff09;&#xff1a;首先&#xff0c…

AI学习(5):PyTorch-核心模块(Autograd):自动求导

1.介绍 在深度学习中&#xff0c;自动求导是一项核心技术&#xff0c;它使得我们能够方便地计算梯度并优化模型参数。PyTorch 提供了一个强大的自动求导模块(Autograd)&#xff0c;它可以自动计算张量的导数得出梯度信息&#xff0c;同时也支持高阶导数计算。 1.1 概念词 在学…

如何使用Docker部署WBO容器并实现固定公网地址访问本地白板界面

&#x1f525;博客主页&#xff1a; 小羊失眠啦. &#x1f3a5;系列专栏&#xff1a;《C语言》 《数据结构》 《C》 《Linux》 《Cpolar》 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&…

浅谈 Linux 网络编程 - 网络字节序

文章目录 前言核心知识关于 小端法关于 大端法网络字节序的转换 函数 前言 在进行 socket 网络编程时&#xff0c;会用到字节流的转换函数、例如 inet_pton、htons 等&#xff0c;那么为什么要用到这些函数呢&#xff0c;本篇主要就是对这部分进行介绍。 核心知识 重点需要记…

C++ 补充之常用遍历算法

C遍历算法和原理 C标准库提供了丰富的遍历算法&#xff0c;涵盖了各种不同的功能。以下是一些常见的C遍历算法以及它们的概念和原理的简要讲解&#xff1a; for_each&#xff1a;对容器中的每个元素应用指定的函数。 概念&#xff1a;对于给定的容器和一个可调用对象&#xff…

SpringBoot2 HelloWorld

基础环境 Java 8 & 兼容java14Maven 3.3 maven设置 vim /Users/mac/apache-maven-3.9.6/conf/settings.xml <mirrors><mirror><id>nexus-aliyun</id><mirrorOf>central</mirrorOf><name>Nexus aliyun</name><url&g…

浅析ARMv8体系结构:原子操作

文章目录 概述LL/SC机制独占内存访问指令多字节独占内存访问指令 独占监视器经典自旋锁实现 LSE机制原子内存操作指令CAS指令交换指令 相关参考 概述 在编程中&#xff0c;当多个处理器或线程访问共享数据&#xff0c;并且至少有一个正在写入时&#xff0c;操作必须是原子的&a…

SpringCloud微服务-Eureka注册中心

Eureka注册中心 文章目录 Eureka注册中心前言1、Eureka的作用2、搭建EurekaServer3、服务注册4、启动多个实例5、服务拉取 -实现负载均衡 前言 在服务调用时产生的问题&#xff1a; //2. 利用RestTemplate发起HTTP请求&#xff0c;查询user String url "http://localho…