历史文章(文章累计460+)
《国内最全的Spring Boot系列之一》
《国内最全的Spring Boot系列之二》
《国内最全的Spring Boot系列之三》
《国内最全的Spring Boot系列之四》
《国内最全的Spring Boot系列之五》
《国内最全的Spring Boot系列之六》
用Midjourney画个美女,AI绘画也太强大了!!! - 第8篇
【EasyPoi实战系列】Spring Boot使用EasyPoi实现多Sheet导出 - 第470篇
【EasyPoi实战系列】Spring Boot使用EasyPoi动态控制导出的列 - 第471篇100万数据导出,居然爆炸了OutOfMemoryError?【EasyPoi实战系列】- 第472篇
悟纤:师傅,在忙吗?
师傅:徒儿,何事?
悟纤:想请教师傅一个小小的问题。
师傅:那你这个小小的问题,5分钟可以搞定不?
悟纤:相信师傅的功力,要不了5分钟。
师傅:那你且说说看来着。
悟纤:就是我想在导出的单元格中,增加一个下拉的选项。
师傅:这个呀,使用了EasyPoi就特别简单,根本不是事,1分钟给你讲清楚。
悟纤:还的是师傅,那咱们马上开始吧~
导读
在实际的excel中,会有下拉的一个选项,供用户进行下拉修改下拉的选项。
对于这样的需求如何实现呢?
@Excel 加入 addressList 是否生成下拉的选项,默认false
目前下拉只支持replace和dict两个取值地方生成。
根据对应的值生成相应的下拉,xssf下拉rowMax = 100万,hssf下拉maxRow=65536,从数据第一行开始生成,使用方法也比较简单。
说明:本节的例子的导出实体类是基于前面的章节的实体类进行使用的,所以看的有点蒙圈的小伙伴可以查看前面的文章:
👇🏻👇🏻👇🏻EasyPoi实战系列:
01.《【EasyPoi实战系列】Spring Boot集成EasyPoi - 第467篇》
02.《【EasyPoi实战系列】Spring Boot使用EasyPoi的注解让表格更漂亮以及图片的导出 - 第468篇》
03.《【EasyPoi实战系列】Spring Boot使用EasyPoi实现一对多的导出 - 第469篇》
04.《【EasyPoi实战系列】Spring Boot使用EasyPoi实现多Sheet导出 - 第470篇》
05.《【EasyPoi实战系列】Spring Boot使用EasyPoi动态控制导出的列 - 第471篇》
06.《100万数据导出,居然爆炸了OutOfMemoryError?【EasyPoi实战系列】- 第472篇》
一、下拉的生成方案一:replace+ addressList
第一种方案是最简单的实现方案,只需要添加一些配置即可:
@Excel(name = "性别",replace = { "男生_1", "女生_2" }, addressList = true)
private Integer sex;
主要是replace和addressList这两个属性配置。
导出的结果如下:
在这里要注意下,这里就不能使用suffix这个属性了,如果是以下这个写法:
@Excel(name = "性别",replace = { "男_1", "女_2" }, suffix = "生", addressList = true)
private Integer sex;
那么导出的结果是:
这里的suffix并不能作为下拉的选项后缀,这个是否是框架应该优化的一个点呢 ?
二、下拉的生成方案二:dict+ addressList
这种方案是使用属性dict,指定一个key,这里的key的逻辑是要实现一个接口IExcelDictHandler进行处理的。
(1)在注解中添加属性dict:
@Excel(name = "性别",dict = "sex",addressList = true)
private Integer sex;
(2)实现接口IExcelDictHandler,添加dict=sex的字段信息:
package com.example.config;
import cn.afterturn.easypoi.handler.inter.IExcelDictHandler;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
*
*/
public class ExcelDiceAddressListHandlerImpl implements IExcelDictHandler {
/**
* 返回字典所有值
* key: dictKey
*
* @param dict 字典Key
* @return
*/
@Override
public List<Map> getList(String dict) {
List<Map> list = new ArrayList<>();
Map<String, String> dictMap = new HashMap<>();
dictMap.put("dictKey", "0");
dictMap.put("dictValue", "女孩子");
list.add(dictMap);
dictMap = new HashMap<>();
dictMap.put("dictKey", "1");
dictMap.put("dictValue", "男孩子");
list.add(dictMap);
return list;
}
@Override
public String toName(String dict, Object obj, String name, Object value) {
if ("sex".equals(dict)) {
int level = Integer.parseInt(value.toString());
switch (level) {
case 1:
return "男孩子";
case 0:
return "女孩子";
}
}
return null;
}
@Override
public String toValue(String dict, Object obj, String name, Object value) {
if ("sex".equals(dict)) {
int level = Integer.parseInt(value.toString());
switch (level) {
case 1:
return "男孩子";
case 0:
return "女孩子";
}
}
return null;
}
}
(3)在导出的方法中,添加字段处理类:
ExportParams exportParams = new ExportParams(title, sheetName,ExcelType.XSSF);
exportParams.setDictHandler(new ExcelDiceAddressListHandlerImpl());
defaultExportX(list, pojoClass, fileName, response,exportParams);
这里核心的代码是:
exportParams.setDictHandler(new ExcelDiceAddressListHandlerImpl());
导出的结果:
我就是我,是颜色不一样的烟火。
我就是我,是与众不同的小苹果。
à悟纤学院:https://t.cn/Rg3fKJD
学院中有Spring Boot相关的课程!点击「阅读原文」进行查看!
SpringBoot视频:http://t.cn/A6ZagYTi
SpringBoot交流平台:https://t.cn/R3QDhU0
SpringSecurity5.0视频:http://t.cn/A6ZadMBe
ShardingJDBC分库分表:http://t.cn/A6ZarrqS
分布式事务解决方案:http://t.cn/A6ZaBnIr
JVM内存模型调优实战:http://t.cn/A6wWMVqG
Spring入门到精通:https://t.cn/A6bFcDh4
大话设计模式之爱你:https://dwz.cn/wqO0MAy7