首页 > 代码库 > NPOI生成单元格(列)下拉框
NPOI生成单元格(列)下拉框
客户提出能否将导入模板中,课程一列添加下拉框方便选择,不用手输入,以减少输入错误的可能性。于是在网上找了点代码,稍加整理后,形成了以下方案,代码部分:
一:生成课程列表,并放置在excel的单独sheet中。
?
1 2 3 4 5 6 7 8 9 10 11 12 13 | IList<CourseCodeInfo> list = StudentBus.GetSubjectInterface().GetList(0, "" , "Name" ); var CourseSheetName = "Course" ; var RangeName = "dicRange" ; ISheet CourseSheet = workbook.CreateSheet(CourseSheetName); CourseSheet.CreateRow(0).CreateCell(0).SetCellValue( "课程列表(用于生成课程下拉框,请勿修改)" ); for ( var i = 1; i < list.Count; i++) { CourseSheet.CreateRow(i).CreateCell(0).SetCellValue(list[i-1].Name); } |
二:生成一个列表引用区域,方便需要的的地方加载这个引用区域。
?
1 2 | IName range = workbook.CreateName(); range.RefersToFormula = string .Format( "{0}!$A$2:$A${1}" ,CourseSheetName,list.Count.ToString());<br>range.NameName = RangeName; |
三:引用以上生成的引用区域。
?
1 2 3 4 | CellRangeAddressList regions = new CellRangeAddressList(1, 65535,4, 4); DVConstraint constraint = DVConstraint.CreateFormulaListConstraint(RangeName); HSSFDataValidation dataValidate = new HSSFDataValidation(regions, constraint); sheet.AddValidationData(dataValidate); |
备注:代码区域二和网上的代码略有不同,网上代码一般为:
?
1 2 3 | HSSFName range = hssfworkbook.CreateName(); range.Reference = "ShtDictionary!$A1:$A3" ; range.NameName = "dicRange" ; |
但在实际编写代码过程中,发现Hssfworkbook.CreateName()生成的是IName,无法直接转换为HSSFName,于是改为:
IName range = workbook.CreateName();
range.RefersToFormula = string.Format("{0}!$A$2:$A${1}",CourseSheetName,list.Count.ToString());
range.NameName = RangeName;
运行也正常,奇怪为什么和网上代码不同呢?估计与NOPI版本有关吧。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。