用POI高效导出Excel下拉框显示数据(多列下拉框)

用POI高效导出Excel下拉框显示数据,并且设置只能选择下拉框里的数据,如果自己输入则会进行提示,以及当选框聚焦时进行提示。

看成果:

用POI高效导出Excel下拉框显示数据(多列下拉框)_第1张图片

1.设置下拉列表

  //设置下拉列表
        Sheet data_validation = workbook.createSheet("Data Validation");
        CellRangeAddressList addressList = new CellRangeAddressList(
                0, 0, 0, 0);
        DVConstraint dvConstraint = DVConstraint.createExplicitListConstraint(
                new String[]{"10", "20", "30"});
        DataValidation dataValidation = new HSSFDataValidation
                (addressList, dvConstraint);
        dataValidation.setSuppressDropDownArrow(false);

2.

出现错误时的消息:
        创建一个消息框,如果用户输入的值无效,将向用户显示该消息框。
    dataValidation.setErrorStyle(DataValidation.ErrorStyle.STOP);
        dataValidation.createErrorBox("提示", "不允许自己输入,请选择下拉框里的数据");

3.

 提示:
 创建一个提示,当包含数据验证的单元格收到焦点时,用户将看到该提示
 dataValidation.createPromptBox("提示", "请选择下拉框里的数据");
        dataValidation.setShowPromptBox(true);

4.

    data_validation.addValidationData(dataValidation);

多列下拉列表

//第一列下拉框
        Sheet hidden = workbook.createSheet("hidden");
        Sheet hidden2 = workbook.createSheet("hidden2");
      //获取到数据源
        BaseRespBo baseRespBo = ytVehicleDocumentService.postToDZTSH(json.toJSONString(), dztshAddress +
                "/vehicleDocument/**");
//这里我是根据我自己的业务进行处理数据,和本次的下拉框导出无关
        String[] company = new String[baseRespBo.getPageData().size()];
        String[] companyDuty = new String[baseRespBo.getPageData().size()];
        for (int j = 0; j < baseRespBo.getPageData().size(); j++) {
            String[] split = baseRespBo.getPageData().get(j).toString().split(",");
            String substring = split[0].substring(17, split[0].length());
            String substring1 = split[1].substring(15, split[1].length() - 1);
            company[j] = substring;
            companyDuty[j] = substring1;
        }
//这里正式开始
        Cell cell = null;
        for (int k = 0; k < company.length; k++) {
            String companyName = company[k];
//hidden是在上面新创建的Sheet,作为一个数据处理中转站
            Row row1 = hidden.createRow(k);
            cell = row1.createCell(0);
            cell.setCellValue(companyName);
        }
        HSSFName namedCell = workbook.createName();
        namedCell.setNameName("hidden");
                                   //照写就行
        namedCell.setRefersToFormula("hidden!$A$1:$A$" + company.length);
        DVConstraint constraint = DVConstraint.createFormulaListConstraint("hidden");
//CellRangeAddressList(开始行,终止行,开始列,终止列)
        CellRangeAddressList regions = new CellRangeAddressList(1, 50, 1, 1);
        HSSFDataValidation dataValidation1 = new HSSFDataValidation(regions, constraint);
        workbook.setSheetHidden(1, true);
        dataValidation1.setSuppressDropDownArrow(false);

        /**
         * 出现错误时的消息:
         *         创建一个消息框,如果用户输入的值无效,将向用户显示该消息框。
         */
        dataValidation1.setErrorStyle(HSSFDataValidation.ErrorStyle.STOP);
        dataValidation1.createErrorBox("提示", "不允许自己输入,请选择下拉框里的数据");

        /**
         * 提示:
         * 创建一个提示,当包含数据验证的单元格收到焦点时,用户将看到该提示
         */
        dataValidation1.createPromptBox("提示", "请选择下拉框里的数据");
        dataValidation1.setShowPromptBox(true);
        data_validation.addValidationData(dataValidation1);


//第二列下拉框
//基本和上面相差不大
  Cell cell2 = null;
        for (int k = 0; k < companyDuty.length; k++) {
            String companyDutys = companyDuty[k];
            Row row2 = hidden2.createRow(k);
            cell2 = row2.createCell(0);
            cell2.setCellValue(companyDutys);
        }
        HSSFName namedCell2 = workbook.createName();
        namedCell2.setNameName("hidden2");
        namedCell2.setRefersToFormula("hidden2!$A$1:$A$" + companyDuty.length);
        DVConstraint constraint2 = DVConstraint.createFormulaListConstraint("hidden2");
        CellRangeAddressList regions2 = new CellRangeAddressList(1, 50, 2, 2);
        HSSFDataValidation dataValidation2 = new HSSFDataValidation(regions2, constraint2);
        workbook.setSheetHidden(2, true);
        dataValidation2.setSuppressDropDownArrow(false);

        /**
         * 出现错误时的消息:
         *         创建一个消息框,如果用户输入的值无效,将向用户显示该消息框。
         */
        dataValidation2.setErrorStyle(HSSFDataValidation.ErrorStyle.STOP);
        dataValidation2.createErrorBox("提示", "不允许自己输入,请选择下拉框里的数据");

        /**
         * 提示:
         * 创建一个提示,当包含数据验证的单元格收到焦点时,用户将看到该提示
         */
        dataValidation2.createPromptBox("提示", "请选择下拉框里的数据");
        dataValidation2.setShowPromptBox(true);
        data_validation.addValidationData(dataValidation2);

你可能感兴趣的:(Apache,POI,-,Excel,java)