导出下拉列表的两种小技巧【EasyPoi实战系列】 |
您所在的位置:网站首页 › easypoi使用根据条件是否展示某个字段 › 导出下拉列表的两种小技巧【EasyPoi实战系列】 |
悟纤:师傅,在忙吗? 师傅:徒儿,何事? 悟纤:想请教师傅一个小小的问题。 师傅:那你这个小小的问题,5分钟可以搞定不? 悟纤:相信师傅的功力,要不了5分钟。 师傅:那你且说说看来着。 悟纤:就是我想在导出的单元格中,增加一个下拉的选项。 师傅:这个呀,使用了EasyPoi就特别简单,根本不是事,1分钟给你讲清楚。 悟纤:还的是师傅,那咱们马上开始吧~ 导读 在实际的excel中,会有下拉的一个选项,供用户进行下拉修改下拉的选项。 对于这样的需求如何实现呢? @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这两个属性配置。 导出的结果如下: 在这里要注意下,这里就不能使用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 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()); 导出的结果: |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |