基于poi生成excel模板并生成下拉选择框

news/2024/7/21 4:42:15 标签: java, excel

直接上代码(有注释)

java">public void downloadImportTemplate(HttpServletResponse response) {
        try {
            ServletOutputStream outputStream = response.getOutputStream();
            //创建工作表
            XSSFWorkbook workbook = new XSSFWorkbook();
            //标题行的标题
            List<String> requireRowNameList = Collections.singletonList("订单编号");
            List<String> optionalRowNameList = Arrays.asList("用户编号");
            String fileName = "导入模板" + DateUtils.formatDateTime();
            XSSFSheet sheet = workbook.createSheet("导入模板");
            XSSFRow row = null;
            XSSFCell cell = null;

            //----------------标题样式---------------------
            XSSFCellStyle titleStyle = workbook.createCellStyle();//标题样式
            titleStyle.setAlignment(HorizontalAlignment.CENTER);
            titleStyle.setVerticalAlignment(VerticalAlignment.CENTER);
            Font titleFont = workbook.createFont();
            titleFont.setFontHeightInPoints((short) 22);
            titleFont.setFontName("微软雅黑");
            titleFont.setBold(true);
            titleStyle.setFont(titleFont);

            //----------------列样式2 必填字段显红色---------------------
            XSSFCellStyle cellStyle2 = workbook.createCellStyle();
            cellStyle2.setAlignment(HorizontalAlignment.CENTER);
            cellStyle2.setVerticalAlignment(VerticalAlignment.CENTER);
            Font cellFont2 = workbook.createFont();
            cellFont2.setFontName("微软雅黑");
            cellFont2.setBold(true);
            cellFont2.setColor((short) 0xa); // 红色
            cellStyle2.setFont(cellFont2);

            //----------------列样式3 非必填字段显黑色---------------------
            XSSFCellStyle cellStyle3 = workbook.createCellStyle();
            cellStyle3.setAlignment(HorizontalAlignment.CENTER);
            cellStyle3.setVerticalAlignment(VerticalAlignment.CENTER);
            Font cellFont3 = workbook.createFont();
            cellFont3.setFontName("微软雅黑");
            cellFont3.setBold(true);
            cellStyle3.setFont(cellFont3 );

            //------------------- 创建第一行(字段名) --------------------
            row = sheet.createRow(0);
            sheet.setDefaultColumnWidth(20);
            sheet.autoSizeColumn(1);
            sheet.autoSizeColumn(1, true);
            int i = 0;
            for (; i < requireRowNameList.size(); i++) {
                cell = row.createCell(i);
                //必填列红色显示
                cell.setCellStyle(cellStyle2);
                cell.setCellValue(requireRowNameList.get(i));
            }
            int j = 0;
            for (; j < optionalRowNameList.size(); i++, j++) {
                cell = row.createCell(i);
                //非必填列黑色显示
                cell.setCellStyle(cellStyle3);
                cell.setCellValue(optionalRowNameList.get(j));
            }
            cell = row.createCell(i);
            //非必填列黑色显示
            cell.setCellStyle(cellStyle3);
            cell.setCellValue("是否通知客户");

            //--------------------设置下拉选择框的代码-----------------------------
            //选择框可选值
            String[] datas = new String[]{"是", "否"};
            //设置需要生成下拉列表的表格范围,1代表从第二行开始,30000代表一直到第三万零一行,第i+1列开始,到第i+1列;
            CellRangeAddressList cellRangeAddressList = new CellRangeAddressList(1, 30000, i, i);
            //生成下拉框内容
            DataValidationHelper dvHelper = sheet.getDataValidationHelper();
            DataValidationConstraint dvConstraint = dvHelper.createExplicitListConstraint(datas);
            DataValidation validation = dvHelper.createValidation(dvConstraint, cellRangeAddressList);
            //设置错误信息提示
            validation.setShowErrorBox(true);
            //对sheet页生效
            sheet.addValidationData(validation);
			//------------------------------------------------
			
            response.setContentType("application/binary;charset=UTF-8");
            response.setHeader("Content-Disposition", "attachment;fileName=" + URLEncoder.encode(fileName + ".xlsx", "UTF-8"));
            FileUtils.setAttachmentResponseHeader(response, fileName);
            workbook.write(outputStream);
            outputStream.flush();
            outputStream.close();
        } catch (Exception e) {
            log.error("获取导入模板失败e={}", e.getMessage(), e);
        }
    }

http://www.niftyadmin.cn/n/4959025.html

相关文章

vite 项目搭建

1. 创建 vite 项目 npm create vite@latest 2. 安装sass/less ( 一般我使用sass ) cnpm add -D sasscnpm add -D less 3. 自动导入 两个插件 使用之后,不用导入vue中hook reactive ref cnpm install -D unplugin-vue-components unplugin-auto-import 在 vite.config.…

Java【手撕双指针】LeetCode 11. “盛水最多的容器“, 图文详解思路分析 + 代码

文章目录 前言一、盛水最多的容器1, 题目2, 思路分析3, 代码展示 前言 各位读者好, 我是小陈, 这是我的个人主页, 希望我的专栏能够帮助到你: &#x1f4d5; JavaSE基础: 基础语法, 类和对象, 封装继承多态, 接口, 综合小练习图书管理系统等 &#x1f4d7; Java数据结构: 顺序表…

SpringMVC 反射型跨站点脚本攻击

解决方案&#xff1a; 服务端校验&#xff0c;添加拦截器 配置web,xml <filter><filter-name>xssFilter </filter-name><filter-class>com.fh.filter.XssFilter </filter-class></filter> XssFilter package com.fh.filter;import com…

DP读书:鲲鹏处理器 架构与编程(七)ARMv8-A 体系结构

一小时速通ARMv8-A体系结构 一、ARMv8-A处理单元核心架构1. ARMv8-A架构的处理器运行模式a. ARMv8-A的执行架构A. AArch64 执行状态B. AArch32 执行状态 b. ARMv8-A架构支持的指令集c. ARMv8-A 支持的数据类型d. ARMv8-A 的异常等级与安全模型e. ARMv8-A的虚拟化架构f. ARMv8-A…

计算两坐标点距离

object DistanceModel {/*** 根据经纬度&#xff0c;计算两点间的距离** param sLon1 第一个点的经度* param sLat1 第一个点的纬度* param sLon2 第二个点的经度* param sLat2 第二个点的纬度* return 返回距离 单位米*/fun getDistance(sLon1: String, sLat1: String,sLon2: …

【人物访谈·03期】关于对数据分析前辈的一次行业探讨

小飞象人物访谈 做一个独立的人&#xff0c;不要依赖别人&#xff0c;独立会给你的魅力加分。 出品&#xff5c;小飞象人物访谈 嘉宾&#xff5c;冰冰老师 采访/整理&#xff5c;木兮 排版&#xff5c;木兮 背景 本期03访谈邀请到了小飞象社群特别嘉宾——冰冰&#xff08;个人…

基于PyQt+mysql图书管理系统

1 需求分析 针对图书馆的图书管理系统数据库设计&#xff0c;分别对图书馆的读者、一般工作人员和部门负责人进行详细地分析&#xff0c;总结出如下的需求信息: &#xff08;1&#xff09;图书馆中的图书具有书号、书名、作者、馆藏册数、在馆册数、价格、出版社及摘要等必要信…

【Kubernetes】Rancher管理集群

目录 1、安装 rancher 2、登录 Rancher 平台 3、Rancher 管理已存在的 k8s 集群 4、Rancher 部署监控系统 5、使用 Rancher 仪表盘管理 k8s 集群 以创建 nginx 服务为例 创建名称空间 namespace 创建 Deployment 资源 创建 service 1、安装 rancher 在 所有 node 节点下…