当前位置: 首页 > news >正文

若依导出模板时设置动态excel下拉框(表连接的)

若依导出模板时设置动态excel下拉框(表连接的)

  • 一、问题
  • 二、解决
    • 1、实体类
    • 2.1、临时使用
    • 2.2、统一工具类
    • 3、调用

一、问题

若依导出只能;使用dictType、combo、comboReadDict、readConverterExp这些来控制字典的导出下拉,如果不是字典了该咋弄,不能一个一个录把,多了少了不愁人,愁人的是要万一一直修改,岂不是每次修改完这导出也需要修改了,直接
在这里插入图片描述

二、解决

1、实体类

@Excel(name = "生产经营区域", readConverterExp = "", combo = {})
private Long deptId;

2.1、临时使用

实现类代码,这里直接临时写入impl,看起来方便,如果很多,那就很麻烦了

public void importTemplate(HttpServletResponse response) throws Exception  {ExcelUtil<SysCompany> util = new ExcelUtil<SysCompany>(SysCompany.class);Class<SysCompany> clazz = util.clazz;Field field = clazz.getDeclaredField("deptId");Excel excel = field.getAnnotation(Excel.class);InvocationHandler h = Proxy.getInvocationHandler(excel);Field hField = h.getClass().getDeclaredField("memberValues");hField.setAccessible(true);Map<String, Object> memberValues = (Map<String, Object>) hField.get(h);// 查询数据库List<SysDept> deptList = deptMapper.selectDeptListAll();String[] comboArray = new String[deptList.size()];StringBuilder readConverterExpStr = new StringBuilder();for (int i = 0; i < deptList.size(); i++) {comboArray[i] = deptList.get(i).getDeptName();if (i == 0){readConverterExpStr.append(deptList.get(i).getDeptId()+"="+deptList.get(i).getDeptName());}else {readConverterExpStr.append(","+deptList.get(i).getDeptId()+"="+deptList.get(i).getDeptName());}}memberValues.put("combo", comboArray);memberValues.put("readConverterExp", readConverterExpStr.toString());util.importTemplateExcel(response, "企业信息模板");}

2.2、统一工具类

这里为了后续使用,直接写入工具类了,在ExcelUtil.java下定义了exportDropdownExcel方法,设置导出下拉框

/*** 设置导出下拉框** @param list 关联集合,查询的列和后续对应;select key,text from table* @param name 需要下拉的字段* @param key 需要映射的值* @param text 需要映射的文本* @throws Exception**/public < E> void exportDropdownExcel(List<E> list, String name, String key, String text) throws Exception {Field field = clazz.getDeclaredField(name);// 获取字段上的Excel注解Excel excel = field.getAnnotation(Excel.class);InvocationHandler h = Proxy.getInvocationHandler(excel);Field hField = h.getClass().getDeclaredField("memberValues");hField.setAccessible(true);Map<String, Object> memberValues = (Map<String, Object>) hField.get(h);// 动态获取字典值Map<String, String> dictMap = new HashMap<>();for (E item : list) {Class<?> dictClass = item.getClass();// 获取字典项的值和文本字段Field keyField = dictClass.getDeclaredField(key);Field textField = dictClass.getDeclaredField(text);// 设置可访问keyField.setAccessible(true);textField.setAccessible(true);String keyStr = String.valueOf(keyField.get(item));String valueStr = String.valueOf(textField.get(item));dictMap.put(keyStr, valueStr);}// 设置下拉框选项String[] comboArray = dictMap.values().toArray(new String[0]);StringBuilder readConverterExpStr = new StringBuilder();int i = 0;for (Map.Entry<String, String> entry : dictMap.entrySet()) {if (i == 0) {readConverterExpStr.append(entry.getKey()).append("=").append(entry.getValue());} else {readConverterExpStr.append(",").append(entry.getKey()).append("=").append(entry.getValue());}i++;}// 修改注解属性memberValues.put("combo", comboArray);memberValues.put("readConverterExp", readConverterExpStr.toString());}

3、调用

临时使用的直接就是调用了,这里调用工具类的

public void importTemplate(HttpServletResponse response) throws Exception  {ExcelUtil<SysCompany> util = new ExcelUtil<SysCompany>(SysCompany.class);util.exportDropdownExcel(deptMapper.selectDeptListAll(),"deptId","deptId","deptName");util.exportDropdownExcel( manageMapper.selectManageListAll(),"superAgencyId","manageId","manageName");util.importTemplateExcel(response, "企业信息模板");}

实现图示如下
在这里插入图片描述

完事直接使用就OK了,有更好的改进和意见可以评论区交流一下
在这里插入图片描述

http://www.lryc.cn/news/572151.html

相关文章:

  • 企微CRM系统中的任务分配与效率提升技巧
  • Mac电脑 - Sublim Text 代码编辑器
  • 大数据基础学习指南:从核心概念到技术生态全景
  • 蓝牙物联网多个核心应用场景开发与应用细化分析
  • Vue3中使用 Vue Flow 流程图方法
  • 在 Dify 平台部署一个 知识库问答(KBQA) 工作流
  • 设计模式之五大设计原则(SOLID原则)浅谈
  • 进程间通信2(命名管道)linux
  • 专题:2025游戏科技与市场趋势报告|附130+份报告PDF汇总下载
  • day35-Django(1)
  • FPGA基础 -- Verilog 系统任务与系统函数
  • angular 图斑点击,列表选中并滚动到中间位置
  • 探索算法秘境:量子随机游走算法及其在图论问题中的创新应用
  • Python 自动化运维与DevOps实践
  • JVM(7)——详解标记-整理算法
  • 基于YOLOv10算法的交通信号灯检测与识别
  • RTSP播放器低延迟实践:一次对毫秒级响应的技术探索
  • 从零开始的云计算生活——第二十天,脚踏实地,SSH与Rsync服务
  • ThinkPHP结合使用PHPConsole向Chrome 控制台输出SQL
  • 计算机网络 网络层:数据平面(一)
  • ​ CATIA V5与3DEXPERIENCE协同设计:引领无人机行业新纪元
  • 【无人机实时拼图框架(正射影像)论文翻译】OpenREALM: Real-time Mapping for Unmanned Aerial Vehicles
  • 14.8 AI写作核心技术解析:四阶段分层提示工程如何实现从大纲到风格的全流程优化
  • RPC - Response模块
  • 2025年通信安全员考试题库及答案
  • JVM(6)——详解标记-清除算法
  • 安卓vscodeAI开发实例
  • 安卓JetPack篇——Livadata
  • 无人机电机模块技术分析
  • Vue-11-前端框架Vue之应用基础父组件传值到子组件props的使用