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

5 apache poi实现excel的动态下拉框功能

excel下拉框

@RequestMapping("xiala")
    public void xiala(HttpServletResponse response){
        String fileName = "僵尸表";
        try{
        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
        response.setCharacterEncoding("utf-8");
        response.setHeader("Content-Disposition","attachment;filename=" +
                URLEncoder.encode(fileName, "UTF-8").replaceAll("\\+", "%20") + ".xlsx");


        Workbook workbook = new XSSFWorkbook();
        Sheet sheet = workbook.createSheet("Sheet1");
        String[] dropdownOptions = {"Option 1", "Option 2", "Option 3"};
        CellRangeAddressList addressList = new CellRangeAddressList(1, 100, 0, 0); // A1单元格。第二行到第100行记录数
            // 创建数据验证助手
        DataValidationHelper validationHelper = sheet.getDataValidationHelper();
        // 创建数据验证约束
        DataValidationConstraint constraint = validationHelper.createExplicitListConstraint(dropdownOptions);
        // 创建数据验证对象
        DataValidation dataValidation = validationHelper.createValidation(constraint, addressList);
        // 将数据验证添加到表格中
        sheet.addValidationData(dataValidation);

        //处罚来源
            String[] publishType = {"个人", "企业", "33"};
            CellRangeAddressList publishTypeList = new CellRangeAddressList(1, 100, 1, 1);//A2单元格 处罚来源,第二行到第100行记录数
            DataValidationConstraint publishTypeConstraint = validationHelper.createExplicitListConstraint(publishType);
            DataValidation publishValidation = validationHelper.createValidation(publishTypeConstraint, publishTypeList);
            sheet.addValidationData(publishValidation);
            
            OutputStream os = new BufferedOutputStream(response.getOutputStream());
            workbook.write(os);
            os.flush();
            os.close();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {

        }

        System.out.println("Excel文件创建成功,包含下拉框!");
    }

excel sheet的复制

@RequestMapping("list")
    public void list(HttpServletResponse response) throws Exception{
        System.out.println("------ 开始下载模板 ------");
        //获取要下载的模板名称
        String fileName = URLEncoder.encode("名单导入模板","UTF-8");
        response.setHeader("Content-Disposition","attachment;filename=" + fileName + ".xlsx");
        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
        response.setCharacterEncoding("utf-8");

        //source sheet
        InputStream inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("template/template.xlsx");
        Workbook sourceWorkbook = new XSSFWorkbook(inputStream);
        Workbook destWorkbook = new XSSFWorkbook();
        // 获取源工作簿中的第一个工作表
        Sheet sourceSheet = sourceWorkbook.getSheetAt(0);
        // 在目标工作簿中创建一个新的工作表
        Sheet destSheet = destWorkbook.createSheet(sourceSheet.getSheetName());
        // 复制每一行
        for (int rowIndex = 0; rowIndex <= sourceSheet.getLastRowNum(); rowIndex++) {
            Row sourceRow = sourceSheet.getRow(rowIndex);
            Row destRow = destSheet.createRow(rowIndex);

            if (sourceRow != null) {
                // 复制每一列
                for (int colIndex = 0; colIndex < sourceRow.getLastCellNum(); colIndex++) {
                    Cell sourceCell = sourceRow.getCell(colIndex);
                    Cell destCell = destRow.createCell(colIndex);

                    if (sourceCell != null) {
                        // 复制单元格的样式
                        CellStyle newCellStyle = destWorkbook.createCellStyle();
                        newCellStyle.cloneStyleFrom(sourceCell.getCellStyle());
                        destCell.setCellStyle(newCellStyle);

                        // 复制单元格的值
                        switch (sourceCell.getCellType()) {
                            case STRING:
                                destCell.setCellValue(sourceCell.getStringCellValue());
                                break;
                            case NUMERIC:
                                destCell.setCellValue(sourceCell.getNumericCellValue());
                                break;
                            case BOOLEAN:
                                destCell.setCellValue(sourceCell.getBooleanCellValue());
                                break;
                            case FORMULA:
                                destCell.setCellFormula(sourceCell.getCellFormula());
                                break;
                            case BLANK:
                                destCell.setBlank();
                                break;
                            default:
                                break;
                        }
                    }
                }
            }
        }

        OutputStream os = new BufferedOutputStream(response.getOutputStream());
        destWorkbook.write(os);
        os.flush();
        os.close();

    }

excel列之间的级联


http://www.kler.cn/news/324715.html

相关文章:

  • 1.1.5 计算机网络的性能指标(上)
  • 力扣 最小覆盖子串
  • 胤娲科技:AI程序员——重塑编程世界的魔法师
  • Spring Boot影院管理系统:小徐的创新
  • 02_OpenCV图片写入
  • select和epoll的详细区别
  • 基于Springboot+Vue的高校教室资源管理系统的设计与实现(含源码+数据库)
  • Oracle表空间管理(三)
  • Open WebUI部署自己的大模型
  • 基于微信小程序的智慧社区的设计与实现
  • 如何使用Kimi编写商品管理设计文档:包含流程图和用例图
  • Springboot+PostgreSQL+MybatisPlus存储JSON或List、数组(Array)数据
  • 【数据治理-设计数据标准】
  • 数据库入门不再难:克服学习障碍的实用技巧与演示
  • 《北方牧业》是什么级别的期刊?是正规期刊吗?能评职称吗?
  • 甄选范文“论软件架构建模技术与应用”,软考高级论文,系统架构设计师论文
  • 工程设备包括哪些内容?
  • Vue和axios零基础学习
  • 基于nodejs+vue的宠物医院管理系统
  • C# 打开文件,打开文件夹对话框
  • FLUX.1 AI图像生成行业的新挑战者
  • 《深度学习》—— 卷积神经网络(CNN)的简单介绍和工作原理
  • 【Linux基础IO】Linux IO编程入门:揭秘动态库与静态库的秘密
  • 大数据新视界 --大数据大厂之Cassandra 分布式数据库在大数据中的应用与调优
  • ansible实用模块
  • CSS网格布局
  • 【JS】forEach中push为何不会陷入死循环,稀疏数组空元素为何不会被遍历
  • 基于微信开发助手企鹅音乐微信小程序的设计与实现(源码+文档+讲解)
  • 上交所服务器崩溃:金融交易背后的技术隐患暴露杭州BGP高防服务器43.228.71.X
  • 双十一有什么好物推荐?绝对不能错过的五款产品