zoukankan      html  css  js  c++  java
  • NPOI 设置下拉列表

    HSSFWorkbook workbook = new HSSFWorkbook();//创建工作簿
    ISheet sheet = workbook.CreateSheet();//创建sheet页
    var namelist = new string[] { "张三", "李四", "王五" };//创建一个数组作为数据源

    var cellRegions = new CellRangeAddressList(5, 65535, 0, 0);//设置生成下拉框的行和列,从第6行到第65536行,从第0列到第0列

    //Excel中允许输入的序列来源长度最大为255个字符,也就是说当下拉项的总字符串长度超过255是将会出错。所以我将下拉列表分为简易列表和引用列表(设置下拉列表的数据源是某一个sheet页)

    1、简易列表
    DVConstraint constraint = DVConstraint.CreateExplicitListConstraint(namelist);//将下拉项作为一个数组传给CreateExplicitListConstraint作为参数创建一个约束
    HSSFDataValidation dataValidate = new HSSFDataValidation(cellRegions, constraint);//绑定下拉框和作用区域,并设置错误提示信息
    dataValidate.CreateErrorBox("输入不合法", "请输入下拉列表中的值。");
    dataValidate.ShowPromptBox = true;//显示提示框
    sheet.AddValidationData(dataValidate);//添加下拉列表

    2、sheet列表

    public void CreateDropdownlist(int firstRow, int col, string name, string[] strarray)
    {
      ISheet sheet = WorkBook.CreateSheet(name);//先创建一个Sheet专门用于存储下拉项的值
      WorkBook.SetSheetHidden(WorkBook.GetSheetIndex(name), SheetState.Hidden);//隐藏Sheet
      int index = 0;
      foreach (var str in strarray)//将下拉列表中的数据循环赋给sheet页
      {
        sheet.CreateRow(index++).CreateCell(0).SetCellValue(str);
      }

      定义一个名称,指向刚才创建的下拉项的区域:
      var rangeName = name + "Range";
      IName range = WorkBook.CreateName();
      range.RefersToFormula = name + "!$A$1:$A$" + (index == 0 ? 1 : index);
      range.NameName = rangeName;

      //-----------------分割线以上是用来创建一个sheet页赋值,然后将sheet页中的内容定义成一个名称,后面用来当作数组传入方法的过程-----------------------

      CellRangeAddressList cellRegions = new CellRangeAddressList(firstRow, 65535, col, col);//划一块地,这块地我要留着种黄瓜

      DVConstraint constraint = DVConstraint.CreateFormulaListConstraint(rangeName);//弄来了二斤瓜苗(补充一下:这里如果传进来的是一堆瓜苗就直接用了,如果是传回来的是一个字符串,比如说“翠花家”,我就去翠花找黄瓜去了)

      HSSFDataValidation dataValidate = new HSSFDataValidation(cellRegions , constraint);//把瓜苗种地里

      dataValidate.CreateErrorBox("输入不合法", "请输入或选择下拉列表中的值。");//提示你挖错了,我这是黄瓜地,茄子在隔壁翠花的地里
      dataValidate.ShowPromptBox = true;  

      WorkBook.GetSheetAt(0).AddValidationData(dataValidate);//雷猴,终于种完地了,回家睡觉
    }

  • 相关阅读:
    不舍
    java 笔记
    Javascript 行为委托
    JavaScript 函数调用的 this词法
    Javascript 闭包
    Javascript 原型链
    理解css的BFC
    多模态检索之CCA算法
    MySQL 基础概念、基础配置、密码破解
    Python的进程和线程
  • 原文地址:https://www.cnblogs.com/liangshibo/p/10316178.html
Copyright © 2011-2022 走看看