美文网首页
Java POI添加下拉选项

Java POI添加下拉选项

作者: Anntly | 来源:发表于2020-03-31 23:18 被阅读0次

给自己打个广告,最近弄了个Excel的工具,支持下拉框,级联下拉框,隐藏Sheet,多线程大数据量导出,生产者消费者模式读取,代码大部分都有注释,有兴趣的朋友可以看看,觉得不错可以帮我弄个star什么的:smile:

方式

  1. 直接给单元格添加下拉框
  2. 使用隐藏Sheet的方式生成下拉框

直接添加下拉框

/**
     * 创建下拉列表选项(单元格下拉框数据小于255字节时使用)
     *
     * @param sheet    所在Sheet页面
     * @param values   下拉框的选项值
     * @param firstRow 起始行(从0开始)
     * @param lastRow  终止行(从0开始)
     * @param firstCol 起始列(从0开始)
     * @param lastCol  终止列(从0开始)
     */
    public void createDropDownList(Sheet sheet, String[] values, int firstRow, int lastRow, int firstCol, int lastCol) {
        DataValidationHelper helper = sheet.getDataValidationHelper();
        CellRangeAddressList addressList = new CellRangeAddressList(firstRow, lastRow, firstCol, lastCol);
        DataValidationConstraint constraint = helper.createExplicitListConstraint(values);
        DataValidation dataValidation = helper.createValidation(constraint, addressList);
        if (dataValidation instanceof HSSFDataValidation ) {
            dataValidation.setSuppressDropDownArrow(false);
        } else {
            dataValidation.setSuppressDropDownArrow(true);
            dataValidation.setShowErrorBox(true);
        }
        sheet.addValidationData(dataValidation);
    }

需要注意的是,这种方式下拉框数据的大小不能超过255个字节,否则会报异常。需要使用隐藏Sheet的方式解决

隐藏Sheet的方式

/**
     * 隐藏Sheet方式创建下拉框(单元格下拉框数据大于255字节时使用)
     *
     * @param sheet  需要添加下拉框的Sheet
     * @param firstRow 起始行
     * @param firstCol 其实列
     * @param endRow   终止行
     * @param endCol   终止列
     * @param dataArray  下拉框数组
     * @param wbCreat    所在excel的WorkBook,用于创建隐藏Sheet
     * @param hidddenSheetName    隐藏Sheet的名称
     * @return
     */
    public void createDropDownListWithHiddenSheet(Sheet sheet, int firstRow,
                                                  int firstCol, int endRow,
                                                  int endCol, String[] dataArray,
                                                  Workbook wbCreat,
                                                  String hidddenSheetName) {

        Sheet hidden = wbCreat.createSheet(hidddenSheetName);
        Cell cell = null;
        for (int i = 0, length = dataArray.length; i < length; i++) {
            String name = dataArray[i];
            Row row = hidden.createRow(i);
            cell = row.createCell(0);
            cell.setCellValue(name);
        }
        Name namedCell = wbCreat.createName();
        namedCell.setNameName(hidddenSheetName);
        namedCell.setRefersToFormula(hidddenSheetName + "!$A$1:$A$" + dataArray.length);
        //sheet设置为隐藏
        wbCreat.setSheetHidden(wbCreat.getSheetIndex(hidden), true);
        //加载数据,将名称为hidden的
        DataValidationConstraint constraint = null;
        // 设置数据有效性加载在哪个单元格上,四个参数分别是:起始行、终止行、起始列、终止列
        CellRangeAddressList addressList = new CellRangeAddressList(firstRow, endRow, firstCol,
                endCol);
        // 创建 DataValidation
        DataValidation validation = null;
        if (sheet instanceof XSSFSheet || sheet instanceof SXSSFSheet) {
            DataValidationHelper dvHelper = sheet.getDataValidationHelper();
            constraint = dvHelper.createFormulaListConstraint(hidddenSheetName);
            validation = dvHelper.createValidation(constraint, addressList);
        } else {
            constraint = DVConstraint.createFormulaListConstraint(hidddenSheetName);
            validation = new HSSFDataValidation(addressList, constraint);
        }
        if (dataValidation instanceof HSSFDataValidation ) {
            dataValidation.setSuppressDropDownArrow(false);
        } else {
            dataValidation.setSuppressDropDownArrow(true);
            dataValidation.setShowErrorBox(true);
        }
        sheet.addValidationData(validation);
    }

在解析Excel数据的时候要注意忽略隐藏Sheet的数据

相关文章

  • Java POI添加下拉选项

    给自己打个广告,最近弄了个Excel的工具,支持下拉框,级联下拉框,隐藏Sheet,多线程大数据量导出,生产者消费...

  • Axure案例——省市二级联动

    Axure案例——省市二级联动 制作流程: 1、添加省份下拉框,添加选项,注意命名; 2、复制省份下拉框右键选择转...

  • 读取Excel到数据库

    Apache POI POI介绍 Apache POI 简介是用Java编写的免费开源的跨平台的 Java API...

  • Java POI多选下拉框

    给自己打个广告,最近弄了个Excel的工具,支持下拉框,级联下拉框,隐藏Sheet,多线程大数据量导出,生产者消费...

  • photoscan中文教程

    photoscan中文教程 1、打开软件点击菜单栏“工作流程”,下拉菜单中有“添加照片”、“添加文件夹”选项,分别...

  • 六号线晚报0705

    天气:晴 风力:无风 java命令 -classpath -classpath和-cp都是java命令的选项,添加...

  • Excel设置下拉选项

    设置下拉选项步骤 方式一:a.选中输入框b.导航栏中选择【数据】——>【插入下拉列表】c.输入需要的数据,添加多个...

  • Axure选择下拉列表选项后添加到文本框效果的实现

    做原型图需要一个效果展示给前端,即一个输入框支持通过下拉菜单添加多个选项,如下图:点击添加按钮,展示下拉列表框,选...

  • java 读取 excel 表格内容

    一、添加依赖 org.apache.poi poi...

  • 来,通过 Excel 来认识神器——POI

    1、POI是什么 Apache POI - the Java API for Microsoft Document...

网友评论

      本文标题:Java POI添加下拉选项

      本文链接:https://www.haomeiwen.com/subject/pnenuhtx.html