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

excel下拉框

java 复制代码
@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的复制

java 复制代码
@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列之间的级联

相关推荐
LAM LAB4 天前
【VBA】Excel指定单元格范围内字体设置样式,处理导出课表单元格
excel·vba
在这habit之下4 天前
Keepalived学习总结
excel
james的分享5 天前
大数据领域核心 SQL 优化框架Apache Calcite介绍
大数据·sql·apache·calcite
莫寒清5 天前
Apache Tika
java·人工智能·spring·apache·知识图谱
Youngchatgpt5 天前
如何在 Excel 中使用 ChatGPT:自动化任务和编写公式
人工智能·chatgpt·自动化·excel
开开心心就好5 天前
安卓开源应用,超时提醒紧急人护独居安全
windows·决策树·计算机视觉·pdf·计算机外设·excel·动态规划
D_C_tyu5 天前
Vue3 + Element Plus | el-table 多级表头表格导出 Excel(含合并单元格、单元格居中)第二版
vue.js·elementui·excel
归叶再无青5 天前
web服务安装部署、性能升级等(Apache、Nginx)
运维·前端·nginx·云原生·apache·bash
骆驼爱记录5 天前
WPS页码设置:第X页共Y-1页
自动化·word·excel·wps·新人首发