需求

给指定列添加下拉列表。如下图:

思路

  1. NPOI的文档网站不能访问了,这里参考的POI文档。
  2. 加下拉列表有两种方式,一种直接写字符串,例如 new String[]{"10", "20", "30"})。这种方式限制最大长度255.
  3. 第二种引用其他单元格。本例中采取的这种方式。新建一个Sheet,将所有选项填入其中。如图中第一行是客户信息,第二行为付款方式信息等等。

代码

/// <summary>
/// The add validation.
/// </summary>
/// <param name="sheet">
/// 要加入列表的sheet
/// </param>
/// <param name="itemSheet">
/// 选项 sheet.
/// </param>
/// <param name="headerCell">
/// 标题单元格
/// </param>
/// <param name="items">
/// 列表项
/// </param>
private static void AddValidation(ISheet sheet, ISheet itemSheet, ICell headerCell, List<string> items)
{
// 新建行
var row = itemSheet.CreateRow(itemSheet.PhysicalNumberOfRows); // 新行中写入选项
for (int i = 0; i < items.Count; i++)
{
var cell = row.CreateCell(i);
cell.SetCellValue(items[i]);
} // 要加下拉列表的范围
var addressList = new CellRangeAddressList(
headerCell.RowIndex + 1,
65535,
headerCell.ColumnIndex,
headerCell.ColumnIndex); var dvHelper = sheet.GetDataValidationHelper(); // 格式 Sheet2!$A$1:$E$1
var dvConstraint = dvHelper.CreateFormulaListConstraint(
$"{itemSheet.SheetName}!$A${row.RowNum + 1}:${Common.Util.NumberToLetter(items.Count)}${row.RowNum + 1}");
var validation = dvHelper.CreateValidation(dvConstraint, addressList); // 强制必须填下拉列表给出的值
// validation.ShowErrorBox = true; sheet.AddValidationData(validation);
}

调用以客户列举例

    // 获取客户列表
var list = new CustomerBll().GetModelList("dr = 0");
var items = list.Select(c => c.cusname).ToList(); // 添加下拉
AddValidation(sheet, itemsSheet, headerRow.Cells.First(c => c.StringCellValue == "客户名称"), items);

参考资料:

  1. POI官方文档
  2. 作者tonyqus的NPOI官方Github

NPOI 添加下拉列表的更多相关文章

  1. Excel 2013中单元格添加下拉列表的方法

    使用Excel录入数据的时候我们通常使用下拉列表来限定输入的数据,这样录入数据就很少发生错误了.Excel 2013较以前的版本发生了很大的变化,那么在Excel 2013是如何添加下拉列表的呢? 下 ...

  2. 怎样为EXCEL2010添加下拉列表

    注意,下面是Excel2010的步骤和截图,其他版本的Excel类似.   首先用鼠标左键点击你要添加下拉列表的单元格. 如果你只想部分区域有下拉列表,也可以选择部分区域. 下面图片是选择的整个列都是 ...

  3. NPOI 设置下拉列表

    HSSFWorkbook workbook = new HSSFWorkbook();//创建工作簿 ISheet sheet = workbook.CreateSheet();//创建sheet页 ...

  4. .NET WinForm程序中给DataGridView表头添加下拉列表实现数据过滤

    转:http://www.cnblogs.com/jaxu/archive/2011/08/04/2127365.html 我们见过Excel中的数据过滤功能,可以通过点击表头上的下拉列表来实现数据的 ...

  5. (转)jquery easyui treegrid使用小结 (主要讲的是如何编辑easyui中的行信息包括添加 下拉列表等)

    在实际应用中可能会碰到不同的需求,比如会根据每行不同的参数或属性设置来设置同列不同的editor类型,这时原有的例子就显的有点太过简单,不能实现我们的需求,现在应用我在项目中的操作为例,显示下实现同列 ...

  6. js添加下拉列表的模糊搜寻

    1引入插件<script type="text/javascript"src="common/lib/jQueryComboSelect/jquery.combo. ...

  7. C# 给Word文档添加内容控件

    C# 给Word文档添加内容控件 在MS Word中,我们可以通过内容控件来向word文档中插入预先定义好的模块,指定模块的内容格式(如图片.日期.列表或格式化的文本等),从而创建一个结构化的word ...

  8. webdynpro 下拉列表控件

    现在界面上添加下拉列表的控件DropDownByKey 在context中创建新的node,和属性DP 返回界面,绑定DP到控件DropDownByKey的SelectedKey 初始方法中代码如下: ...

  9. NPOI操作Excel文件

    首先,通过NuGet添加NPOI. NPOI依赖SharpZipLib,通过NuGet添加SharpZipLib. 然后添加NPOI. 添加后项目的引用列表如下: 把DataTable转换成Excel ...

随机推荐

  1. Hadoop之Vmware通过仅Use Host-Only networking(使用主机网络)主机链接

    Use Host-Only networking(使用主机网络)连接方式 [1]现在宿主机也就是本地电脑上设置IP地址 [2]设置虚拟机 Host-Only 方式            验证    宿 ...

  2. Jenkins部署+svn

    Jenkins是基于Java开发的一种持续集成工具,用于监控持续重复的工作,功能包括: 1.持续的软件版本发布/测试项目. 2.监控外部调用执行的工作.       确保java工作环境jdk.tom ...

  3. Enum枚举类使用集合

    1.使用扩展方法使用枚举值对于的Description属性值 public static class EnumExtenstion { public static string GetDescript ...

  4. Windows路由表配置:双网卡路由分流

    一.windows 路由表解释 route print - ====================================================================== ...

  5. php设计模式之建造者模式

    建造者模式 建造者设计模式的目的是消除其他对象的复杂创建过程.使用建造者设计模式不仅是最佳的做法,而且在摸个对象的构造和配置方法改变时候,可以尽可能的减少重复更改代码. <?php /** *p ...

  6. git回退到某个commit

    git log查看提交历史及提交的commit_id 回退命令: $ git reset --hard HEAD^ 回退到上个版本$ git reset --hard HEAD~3 回退到前3次提交之 ...

  7. Microsoft-PetSop4.0(宠物商店)-数据库设计-Oracle

    ylbtech-DatabaseDesgin:Microsoft-PetSop4.0(宠物商店)-数据库设计-Oracle DatabaseName:PetShop(宠物商店) Model:宠物商店网 ...

  8. mysql中show processlist过滤和杀死线程

    select * from information_schema.processlist where HOST LIKE '%192.168.1.8%'; kill ID列

  9. 【引用】python 静态函数 类函数 实例函数

    1.关于定义类的一些奇特之处  今天在Python中定义一个类,很奇怪,不需要事先声明它的成员变量吗?暂时不知,先记录下来: class Account(object):    "一个简单的 ...

  10. javascript 模块引擎 (手写草稿)

    1.试题: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...