EasyExcel导出带有下拉框的表头模板

news2025/1/14 18:22:32
1.接口层
    @ApiOperation("其他费用配置-模版下载")
    @GetMapping("/downloadTemplate")
    public void downloadTemplate(HttpServletResponse response) {
        try {
            List<String> list = Arrays.asList("集团", "平台", "部门", "店铺", "年月", "币别", "费用项目", "金额",
                    "分摊类型", "分摊依据", "订单号", "备注"
            );
            ExcelUtils.exportTemplate(response, ExcelUtils.getSimpleHead(list), new SheetWriteHandler() {
                @Override
                public void afterSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) {
                //费用项目的下拉框的值
                    String[] expenseItem = new String[]{"退款", "库存损益", "库存清理", "商品成本", "平台费", "收款费用", "物流成本", "包材费", "资金成本", "营销费",
                            "刊登费", "vat费", "炒分", "云主机及vps", "vps及其他", "固定服务费分摊", "GBC罚款", "销毁成本", "其他款项", "罚款或暂扣货款金额", "收款费及其他", "服务费"};
                     //分摊类型的下拉框的值
                    String[] shareType = new String[]{"店铺承担", "部门承担", "集团承担", "平台承担", "公司承担"};
                    //分摊依据的下拉框的值
                    String[] shareGist = new String[]{"总收入", "商品成本", "计算重量", "订单系数", "订单量"};
                    Map<Integer, String[]> mapDropDown = new HashMap<>();
                    mapDropDown.put(6, expenseItem);
                    mapDropDown.put(8, shareType);
                    mapDropDown.put(9, shareGist);
                    ExcelUtils.sheetConfig(writeSheetHolder, mapDropDown);
                }
            }, "其他费用配置", "其他费用配置");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
2.ExcelUtils
  //带下拉的模板
    public static <T> void exportTemplate(HttpServletResponse response, List<List<String>> head, SheetWriteHandler handler, String fileName, String sheetName) throws IOException {
        try {
            //获取指定路径文件的MIME类型
            setDownloadResponse(response, fileName);
            EasyExcel.write(response.getOutputStream()).head(head).autoCloseStream(Boolean.FALSE).sheet(sheetName).registerWriteHandler(handler)
                    .doWrite(new ArrayList<>());
        } catch (Exception e) {
            returnErrorMessage(response, e);
        }
    }


   /**
     * 获取下载excel 的响应对象
     *
     * @param response 响应对象
     * @param fileName 文件路径
     * @return 响应对象
     * @throws Exception 异常对象
     */
    public static void setDownloadResponse(HttpServletResponse response, String fileName) throws Exception {
        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
        response.setCharacterEncoding(StandardCharsets.UTF_8.name());
        //反馈给客户端文件用于下载
        response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=" + URLEncoder.encode(fileName + ExcelTypeEnum.XLSX.getValue(), StandardCharsets.UTF_8.name()));

    }


    /**
     * 返回文件下载失败的json 原因
     *
     * @param response  响应对象
     * @param exception 异常对象
     * @throws IOException IO异常
     */
    private static void returnErrorMessage(HttpServletResponse response, Exception exception) throws IOException {
        // 重置response
        response.reset();
        response.setContentType("application/json");
        response.setCharacterEncoding(StandardCharsets.UTF_8.name());
        Map<String, String> map = new HashMap<>();
        map.put("status", "failure");
        map.put("message", "下载文件失败" + exception.getMessage());
        response.getWriter().println(JSON.toJSONString(map));
    }



//设置下拉框
 public static void sheetConfig(WriteSheetHolder writeSheetHolder, Map<Integer, String[]> mapDropDown) {
        Sheet sheet = writeSheetHolder.getSheet();
        ///开始设置下拉框
        DataValidationHelper helper = sheet.getDataValidationHelper();//设置下拉框
        for (Map.Entry<Integer, String[]> entry : mapDropDown.entrySet()) {
            /***起始行、终止行、起始列、终止列**/
            CellRangeAddressList addressList = new CellRangeAddressList(1, 1000, entry.getKey(), entry.getKey());
            /***设置下拉框数据**/
            DataValidationConstraint constraint = helper.createExplicitListConstraint(entry.getValue());
            DataValidation dataValidation = helper.createValidation(constraint, addressList);
            /***处理Excel兼容性问题**/
            if (dataValidation instanceof XSSFDataValidation) {
                dataValidation.setSuppressDropDownArrow(true);
                dataValidation.setShowErrorBox(true);
            } else {
                dataValidation.setSuppressDropDownArrow(false);
            }
            sheet.addValidationData(dataValidation);
        }
    }
实现效果

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1104881.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

欧盟反垄断法的改变:对跨境电商的冲击和机遇

2024年&#xff0c;欧盟反垄断法将经历一场革命性的改变&#xff0c;这对于跨境电商来说是一个重大的法规转折点。长达数十年的联合体集体豁免条例&#xff08;CBER&#xff09;即将失效。 这意味着货运公司将不再享受欧盟针对反竞争协议规则的特殊待遇。这一法规的变革将对跨…

【精选】目前我国网络安全人才市场状况

网络安全人才市场状况 本章以智联招聘多年来形成的丰富的招聘、求职信息大数据为基础&#xff0c;结合了奇安信集团 在网络安全领域多年来的专业研究经验&#xff0c;相关研究成果具有很强的代表性。对涉及安全人才 的全平台招聘需求与求职简历进行分析&#xff08;注&#xf…

(十)Python异常处理机制

程序运行时常会碰到一些错误&#xff0c;例如除数为 0、年龄为负数、数组下标越界等&#xff0c;这些错误如果不能发现并加以处理&#xff0c;很可能会导致程序崩溃。 和 C、Java 这些编程语言一样&#xff0c;Python 也提供了处理异常的机制&#xff0c;可以让我们捕获并处理…

【前端学习】—判断成立(十二)

【前端学习】—判断成立&#xff08;十二&#xff09; <script>let value 0;Object.defineProperty(window, "a", {get() {return (value 1);},});if (a 1 && a 2 && a 3) {console.log("object");}</script>

Codesys V3协议漏洞挖掘方法

背景概述 Codesys是全球最著名的软PLC内核软件研发厂家德国的3S&#xff08;SMART&#xff0c;SOFTWARE&#xff0c;SOLUTIONS&#xff09;公司发布的一款与制造商无关IEC 61131-1编程软件及工控设备内核&#xff08;runtime SDK&#xff09;。Codesys 支持完整版本的IEC61131…

外置告警蜂鸣器使用小坑

告警蜂鸣器调试小坑 昨天调试新产品&#xff0c;由于IMO、MSC组织和IEC标准规定&#xff0c;不能使用带红色指示灯的蜂鸣器&#xff0c;于是更换了个不带灯。然而奇怪的现象出现了两次短响的程序在有的页面正常&#xff0c;有的页面就变成一声了。搞了一天&#xff0c;把各种寄…

老子云平台会员专业又有性价比!

老子云平台会员今天已经正式上线了&#xff0c;让我们来看看这次上线有什么超值福利&#xff0c;又有什么惊喜在等着我们呢&#xff1f; 1、全平台权益通享 一大波会员权益来袭&#xff0c;感受一下老子云平台的热情和诚意&#xff01; *** 权益详情&#xff1a;** 点击查看…

如何选择适合的招聘小程序源码?

作为招聘行业的专家&#xff0c;选择适合的招聘小程序源码是确保招聘过程高效顺利的关键一步。随着移动互联网的快速发展&#xff0c;招聘小程序已成为许多企业追逐人才的利器。然而&#xff0c;在众多的招聘小程序源码中&#xff0c;如何明智地做出选择&#xff0c;符合自身需…

AI大模型高速发展,Web3还远吗?

在过去的几年里&#xff0c;人工智能&#xff08;AI&#xff09;和Web3技术都经历了令人瞩目的发展。AI大模型&#xff0c;特别是像GPT-3、GPT-4等这样的巨型语言模型&#xff0c;已经成为AI领域的明星&#xff0c;而Web3则代表了下一代互联网的愿景&#xff0c;具有去中心化和…

stable diffusion和midjourney哪个好

midjourney和stable diffusion哪个好&#xff1f;midjourney和stable diffusion的区别&#xff1f;那么今天就从这2款软件入手&#xff0c;来探索一下他们的功能的各项区别吧&#xff0c;让你选择更适合你的一款ai软件。 截至目前&#xff0c;我们目睹了生成式人工智能工具的在…

图纸管理、图纸管理规范

图纸管理 一、作业的 图纸管理是重要的后勤保障工作&#xff0c;必须做到收发及时&#xff0c;手续齐全&#xff0c;废图绝迹&#xff0c;不遗失&#xff0c;无差错 彩虹图纸管理系统彩虹图纸管理软件_图纸管理系统_图纸文档管理软件系统_彩虹EDM【官网】彩虹EDM图纸管理软件系…

【Linux初阶】多线程4 | POSIX信号量,基于环形队列的生产消费模型,线程池,线程安全的单例模式,STL-智能指针和线程安全

文章目录 ☀️一、POSIX信号量&#x1f33b;1.引入&#x1f33b;2.信号量的概念&#x1f33b;3.信号量函数 ☀️二、基于环形队列的生产消费模型&#x1f33b;1.理解环形队列&#x1f33b;2.代码案例 ☀️三、线程池☀️四、线程安全的单例模式&#x1f33b;1.单例模式与设计模…

内网渗透-哈希传递

文章目录 哈希传递概念LMNTLM 原理利用hash传递 浏览上传文件实操&#xff1a;使用域中的一台机器通过哈希传递查看域控主机的C盘目录 hash传递获取域控RDPhash传递获取域控RDP 哈希传递 概念 早期SMB协议铭文在网络上传输数据&#xff0c;后来诞生了LM验证机制&#xff0c;L…

FPGA ZYNQ VIVADO创建IP核点亮LED灯 方式一

这里写自定义目录标题 PL端 纯Verilog语言创建IP核实现点亮LED灯工使用设备 ZYNQ 7010&#xff0c;选择设备型号XC7Z010CLG400-1根据以下流程完成本次创建时钟频率50MHZ&#xff0c;周期T20ns&#xff0c;因此计数50_000_000次&#xff0c;1sLED灯闪烁一次 PL端 纯Verilog语言创…

解决 Windows 7 激活信息失败报错 0xC004F057

文章目录 步骤一&#xff1a;以管理员身份运行命令提示符步骤二&#xff1a;卸载当前密钥信息步骤三&#xff1a;清除产品密钥信息步骤四&#xff1a;重新启动 Windows Activation Technologies 服务步骤五&#xff1a;重启电脑 &#x1f389;解决 Windows 7 激活信息失败报错 …

一款超好用的AI Logo生成器,免费可商用

HI&#xff0c;同学们&#xff0c;我是赤辰&#xff0c;本期是第20篇AI工具类教程&#xff0c;文章底部准备了粉丝福利&#xff0c;看完后可领取&#xff01; 在职场中&#xff0c;常常免不了需要进行Logo设计和制作&#xff0c;特别是对于非专业人员来说&#xff0c;设计Logo…

C语言文件操作(上)

文章目录 一、为什么使用文件二、什么是文件1.程序文件2.数据文件3.文件名 三、文件的打开与关闭1.文件指针2.文件的打开和关闭fopen 与 fclose 四、文件的顺序读写01 字符输出函数&#xff1a;fputs02 字符输入函数&#xff1a;fgetc03 文本行输出函数&#xff1a;fputs04 文本…

【计算机网络笔记】计算机网络性能(2)——时延带宽积、丢包率、吞吐量/率

系列文章目录 什么是计算机网络&#xff1f; 什么是网络协议&#xff1f; 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 分组交换 vs 电路交换 计算机网络性能&#xff08;1&#xff09;——速率、带宽、延迟 系列文章目录时延带宽积丢包率吞吐量/率&am…

探讨Acrel-1000DP分布式光伏系统的设计与应用-安科瑞 蒋静

摘 要&#xff1a;分布式光伏发电特指在用户场地附近建设&#xff0c;运行方式以用户侧自发自用、余电上网&#xff0c;且在配电系统平衡调节为特征的光伏发电设施&#xff0c;是一种新型的、具有广阔发展前景的发电和能源综合利用方式&#xff0c;它倡导就近发电&#xff0c;就…

数据可视化工具 ,不会写 SQL 代码也能做数据分析

数据可视化工具可以帮助人们以直观、易于理解的方式展现和分析数据。这些工具使得即使不会写 SQL 代码的人也能进行数据分析&#xff0c;并从中获得有价值的信息和见解。 本文将详细介绍几种常用的数据可视化工具及其功能和优点。 1. Datainside: Datainside是一款流行的数…