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);//雷猴,终于种完地了,回家睡觉
}

最新文章

  1. NODE.JS学习的常见误区及四大名著
  2. 20140207 - Java and Mac OS X Retina
  3. C++杂谈(一)const限定符与const指针
  4. (转)VS.NET2010水晶报表安装部署[VS2010]
  5. UBUNTU查看软件版本
  6. js对于工厂模式的理解
  7. 图论专题训练1-D(K步最短路,矩阵连乘)
  8. 原生JS的DOM节点操作
  9. 使用webpack热加载,开发多页面web应用
  10. 【转】关于Sentry
  11. k64 datasheet学习笔记39---Programmable Delay Block (PDB)
  12. ASP.NET MVC 枚举类型转LIST CONTROL控件
  13. HTML5 学习05—— 拖放(Drag 和 Drop)
  14. Python3 Iterator and Generator
  15. [osg]osg背景图设置
  16. snmp安装
  17. node学习笔记1——配置node环境变量及执行node文件
  18. java程序员如何编写更好的单元测试的7个技巧
  19. x86汇编知识点汇总
  20. 设置套接口的选项setsockopt的用法

热门文章

  1. 【RocketMQ源码学习】- 5. 消息存储机制
  2. win10 下安装zookeeper+Kafka 的详细步骤(2)
  3. mac 安装zmap
  4. EntityFramework Core 3多次Include导致查询性能低之解决方案
  5. Web渗透测试流程
  6. MySQL双日志
  7. Django杂录
  8. 怎么把宿主机上的镜像推送到hub上
  9. 修改PHP上传文件大小限制
  10. c++关于multiset的头文件包含问题