首页 > 其他分享 >EasyExcel设置下拉选项

EasyExcel设置下拉选项

时间:2022-12-26 15:46:11浏览次数:34  
标签:选项 sheet String int EasyExcel getKey selectMap 设置 entry

public class SelectSheetWriteHandler implements SheetWriteHandler {

    private Map<Integer, List<String>> selectMap;

    private int index;

    private char[] alphabet = new char[]{'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L',
            'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'};

    public SelectSheetWriteHandler(Map<Integer, List<String>> selectMap) {
        this.selectMap = selectMap;
        this.index = 0;
    }

    @Override
    public void beforeSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) {

    }

    @Override
    public void afterSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) {
        if (selectMap == null || selectMap.size() == 0) {
            return;
        }
        // 需要设置下拉框的sheet页
        Sheet curSheet = writeSheetHolder.getSheet();
        DataValidationHelper helper = curSheet.getDataValidationHelper();
        String dictSheetName = "字典sheet";

        Workbook workbook = writeWorkbookHolder.getWorkbook();

        // 数据字典的sheet页
        Sheet dictSheet = workbook.createSheet(dictSheetName);
        // 从第二个工作簿开始隐藏,为了用户的友好性,将字典sheet隐藏掉
        this.index++;
        // 设置隐藏
//        workbook.setSheetHidden(this.index, true);
        for (Map.Entry<Integer, List<String>> entry : selectMap.entrySet()) {
            // 设置下拉单元格的首行、末行、首列、末列
            CellRangeAddressList rangeAddressList = new CellRangeAddressList(1, 65533, entry.getKey(), entry.getKey());
            int rowLen = entry.getValue().size();
            // 设置字典sheet页的值 每一列一个字典项
            for (int i = 0; i < rowLen; i++) {
                Row row = dictSheet.getRow(i);
                if (row == null) {
                    row = dictSheet.createRow(i);
                }
                row.createCell(entry.getKey()).setCellValue(entry.getValue().get(i));
            }
            String excelColumn = getExcelColumn(entry.getKey());
            // 下拉框数据来源 eg:字典sheet!$B1:$B2
            String refers = dictSheetName + "!$" + excelColumn + "$1:$" + excelColumn + "$" + rowLen;
            // 创建可被其他单元格引用的名称
            Name name = workbook.createName();
            // 设置名称的名字
            name.setNameName("dict" + entry.getKey());
            // 设置公式
            name.setRefersToFormula(refers);
            // 设置引用约束
            DataValidationConstraint constraint = helper.createFormulaListConstraint("dict" + entry.getKey());
            // 设置约束
            DataValidation validation = helper.createValidation(constraint, rangeAddressList);
            // 添加下拉框约束
            writeSheetHolder.getSheet().addValidationData(validation);
        }

    }

    /**
     * desc: 将数字列转化成为字母列
     * date: 2022/12/26 15:32
     * @param num 
     * @return {@link String}
    */
    private String getExcelColumn(int num) {
        String column = "";
        int len = alphabet.length - 1;
        int first = num / len;
        int second = num % len;
        if (num <= len) {
            column = alphabet[num] + "";
        } else {
            column = alphabet[first - 1] + "";
            if (second == 0) {
                column = column + alphabet[len] + "";
            } else {
                column = column + alphabet[second - 1] + "";
            }
        }
        return column;
    }
}

 

标签:选项,sheet,String,int,EasyExcel,getKey,selectMap,设置,entry
From: https://www.cnblogs.com/stromgao/p/17005945.html

相关文章

  • el-radio-group初始化默认值后点击无法切换问题/vue中设置表单对象属性页面不同步问题
     <el-radio-groupv-model="ruleForm.type"><el-radio:label="1">方案一</el-radio><el-radio:label="2">方案二</el-radio></el-radio-group>原初始......
  • 网页中、英文安全字体选择及设置
    天缘博客目前已支持雅黑字体显示,这样在Vista/​​Windows7​​上会看起来更舒服点,问题虽小不过在测试时还是有些小的细节问题,这里总结一下,网页字体显示要求浏览者必须具有......
  • HttpClient 不同版本的超时时间设置
    HttpClient4.3。HttpClient这货和Lucene一样,每个版本的API都变化很大,这有点让人头疼。就好比创建一个HttpClient对象吧,每一个版本的都不一样,3.X是这样的​​​​​​HttpCl......
  • 群晖NAS如何设置电子邮件通知
    设置邮件通知后不仅可以让管理员快速接收到NAS发生错误时的提醒,还可以让普通用户自主找回密码,向新用户发送包含账户、密码及登录地址的邮件。减轻管理员工作量,具体操作如下:1......
  • 给 systemd-boot 设置默认启动项
    title:给systemd-boot设置默认启动项description:安装windows和linux双系统后,设置windows为默认启动项tags:-linuxdate:2022-10-1915:35目录打印可......
  • mongodb shell设置
    [root@host-172-16-13-179~]#cat/root/.mongorc.jshost=db.serverStatus().host;cmdCount=1;prompt=function(){returndb+"@"+host+""+(cmdCount++)+">";}func......
  • curl常用设置-涉及超时相关
    curl_easy_setopt(curl,CURLOPT_VERBOSE,1L);//在屏幕打印请求连接过程和返回http数据curl_easy_setopt(curl,CURLOPT_TIMEOUT,10);//接收数据时超时设置,如果10......
  • vs2010下设置release版本调试设置
    设置在Release模式下调试的方法:1.工程项目上右键->属性2.c++->常规-〉调试信息格式   选 程序数据库(/Zi)或(/ZI),注意:如果是库的话,只能(Zi)3.c++->优化......
  • 下载Excel导出模板时设置下拉框
    一个需要导出的数据@DropDownSetField#source注入字符串,作为下拉框数据 @DropDownSetField#sourceClass 注入一个类,获取数据库等持久化数据,作为下拉框数据 @Datapu......
  • x264的一些参数设置对编码效率的影响
    i_luma_deadzone[0]和i_luma_deadzone[1]分别对应inter和intra,取值范围1~32,测试可以得知,这连个参数的调整可以对数据量有很大影响,值越大数据量相应越少,占用带宽越低; ......