导出下拉列表的两种小技巧【EasyPoi实战系列】

您所在的位置:网站首页 easypoi使用根据条件是否展示某个字段 导出下拉列表的两种小技巧【EasyPoi实战系列】

导出下拉列表的两种小技巧【EasyPoi实战系列】

2023-06-29 05:12| 来源: 网络整理| 查看: 265

导出下拉列表的两种小技巧【EasyPoi实战系列】- 第473篇_EasyPoi

悟纤:师傅,在忙吗?

导出下拉列表的两种小技巧【EasyPoi实战系列】- 第473篇_List_02

师傅:徒儿,何事?

导出下拉列表的两种小技巧【EasyPoi实战系列】- 第473篇_List_03

悟纤:想请教师傅一个小小的问题。

师傅:那你这个小小的问题,5分钟可以搞定不?

悟纤:相信师傅的功力,要不了5分钟。

师傅:那你且说说看来着。

悟纤:就是我想在导出的单元格中,增加一个下拉的选项。

师傅:这个呀,使用了EasyPoi就特别简单,根本不是事,1分钟给你讲清楚。

悟纤:还的是师傅,那咱们马上开始吧~

导出下拉列表的两种小技巧【EasyPoi实战系列】- 第473篇_List_04

导读

在实际的excel中,会有下拉的一个选项,供用户进行下拉修改下拉的选项。

导出下拉列表的两种小技巧【EasyPoi实战系列】- 第473篇_EasyPoi_05

对于这样的需求如何实现呢?

@Excel 加入 addressList 是否生成下拉的选项,默认false

目前下拉只支持replace和dict两个取值地方生成。

根据对应的值生成相应的下拉,xssf下拉rowMax = 100万,hssf下拉maxRow=65536,从数据第一行开始生成,使用方法也比较简单。

一、下拉的生成方案一:replace+ addressList

第一种方案是最简单的实现方案,只需要添加一些配置即可:

@Excel(name = "性别",replace = { "男生_1", "女生_2" }, addressList = true) private Integer sex;

主要是replace和addressList这两个属性配置。

导出的结果如下:

导出下拉列表的两种小技巧【EasyPoi实战系列】- 第473篇_ide_06

在这里要注意下,这里就不能使用suffix这个属性了,如果是以下这个写法:

@Excel(name = "性别",replace = { "男_1", "女_2" }, suffix = "生", addressList = true) private Integer sex;

那么导出的结果是:

导出下拉列表的两种小技巧【EasyPoi实战系列】- 第473篇_EasyPoi_07

这里的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 getList(String dict) { List list = new ArrayList(); Map 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());

导出的结果:

导出下拉列表的两种小技巧【EasyPoi实战系列】- 第473篇_EasyPoi_05

我就是我,是颜色不一样的烟火。 我就是我,是与众不同的小苹果。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3