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版本有关吧。

时间: 2024-08-06 20:06:18

NPOI生成单元格(列)下拉框的相关文章

NPOI 生成Excel (单元格合并、设置单元格样式:字段,颜色、设置单元格为下拉框并限制输入值、设置单元格只能输入数字等)

NPIO源码地址:https://github.com/tonyqus/npoi NPIO使用参考:源码中的 NPOITest项目 下面代码包括: 1.包含多个Sheet的Excel 2.单元格合并 3.设置单元格样式:字段,颜色 4.设置单元格为下拉框并限制输入值 5.设置单元格只能输入数字 // // GET: /Excel/ public ActionResult Write() { var workbook = new HSSFWorkbook();//从流内容创建Workbook对象

Excel 设置单元格为下拉框,并且设置数据来源

1.选中单元格,设置Data Validation为下拉框: 2 .数据来源代码设置: =OFFSET(DropDownValues!$C$2,0,0,COUNTIF(DropDownValues!$C:$C,">=""")-1,1) // 表示数据来源于"DropDownValues"这个sheet的C列,筛选出不为空的数值作为数据源 原文地址:https://www.cnblogs.com/Aaron-Lee/p/9964777.htm

js生成tree形组织机构下拉框

1.首先我们正常数据是如下所示: [ { id: 1, pid: 0, name: '公司组织' }, { id: 2, pid: 1, name: '总经办' }, { id: 3, pid: 1, name: '人事部' }, { id: 4, pid: 1, name: '生产部' }, { id: 5, pid: 4, name: '现场组' }, { id: 6, pid: 4, name: '组装组' }, ] 2.我们最好在后台组装成json格式数据,如下显示: [ { id: 1

如何为EXCEL单元格制作下拉菜单

如何为EXCEL中的某列制作下拉菜单 下面用两种方法介绍下拉菜单的实现: 第一种方法比较简单,如果下拉菜单更改的不频繁,可以采用:第二种方法更适合菜单更改频繁的情况. 注意:如果点击单元格时右侧没有出现下拉的按钮,可能是格式丢失,可以通过复制上面单元格的方法来修复. 如何制作下拉菜单(以下内容以EXCEL2007为准,版本不同可能造成操作步骤不同) A. 先做好一个表格,如下图: B. 选择需要制作下拉菜单的列中的第一行(如性别列中的第一行,非标题行),点击菜单中[数据]-[数据有效性]-[数据

Excel的单元格设置下拉选项并填充颜色

如何在Excel的单元格中加入下拉选项 方法/步骤   第一步:打开excel文档,选中需加入下拉选项的单元格.  第二步:点击菜单中的"数据"->"数据有效性"->"数据有效性".   第三步:在弹出的页面中设置菜单下,点击"允许"下选择"序列"按钮.   第四步:在来源中输入单元格中需设置的下拉选项,用英文的逗号","隔开,然后点击确定按钮. 即可得到我们要的效果. 怎么

优化jeecg底层高级查询,支持bool值和下拉框查询

最近在用jeecg做项目,在使用高级查询的时候发现它不支持布尔值的查询以及列表的下拉框的查询,所以小编修改了底层代码,完善了高级查询,现在与大家一起分享.先上一张图给大家看一下修改前的高级查询. 它只支持了文本的查询以及日期格式的查询,很难满足在使用过程中的要求.所以小编把他的功能丰富了一下,下面把源码分享给大家. 首先先简单介绍一下jeecg高级查询的原理,一切的秘密都在DataGridTag这个标签类里面,在打开一个页面的时候,这个类会对页面的左右变迁进行初始化,以及对高级查询的页面进行构造

jQuery动态生成&lt;select&gt;下拉框

前一阵在项目里需要动态生成下拉框,找了一下用jQuery实现比较方便,这里整理一下. 下文所述方法只是本人在项目中遇到问题的解决方法,场景较为简单,也希望能帮助有需要的朋友 1.动态生成下拉框的两种方式 (1)将数据放在model中,JSP页面用EL表达式${}取出,该方式缺点是数据更改时必须刷新整个页面,本文不过多描述. (2)就是本文要说的jQuery动态生成了,该方式适合数据频繁变动的场景. 2.<select>组成 <select> <option value=”aa

GridView列添加下拉框,绑定数据源并设置默认值

添加下拉框:   注意:默认值只能在界面初始化直接中设置 DataGridViewComboBoxColumn dataGridViewComboBoxColumn = new DataGridViewComboBoxColumn(); dataGridViewComboBoxColumn.Name = "dgvcbcSeatType"; dataGridViewComboBoxColumn.DataPropertyName = "SeatType"; dataGr

Excel 2013如何为某一列都限制只能填写下拉框的值

如下图: 先选中那一列,然后选择数据中的数据验证,来源中用逗号分隔的就是下拉框的选项值,其中的逗号要是英文的逗号.