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列之间的级联

相关推荐
阿眠15 小时前
vue3实现web端和小程序端个人签名
前端·小程序·apache
愿你天黑有灯下雨有伞16 小时前
Java使用FastExcel实现Excel文件导入
java·excel
爆爆凯16 小时前
Excel 导入导出工具类文档
java·excel
凌康ACG1 天前
springboot打包二次压缩Excel导致损坏
spring boot·后端·excel
熊文豪1 天前
时序数据库选型指南 —— 为什么选择 Apache IoTDB?
apache·时序数据库·iotdb
lang201509281 天前
Apache Ignite 的 Pages Writes Throttling(页面写入节流)
apache
诸葛大钢铁1 天前
Excel转PDF的三种方法
笔记·职场和发展·pdf·excel
小小薛定谔2 天前
java操作Excel两种方式EasyExcel 和POI
java·python·excel
FreeBuf_2 天前
Apache CXF 漏洞曝光:存在拒绝服务与数据泄露双重风险
apache