需求

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

思路

  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

最新文章

  1. 对应sslocal的简易luci web界面
  2. python --&gt; 递归 以及装饰器
  3. WPF平台Grid控件性能比较
  4. Linux 下 PHP 扩展 cURL 编译安装
  5. Matlab之findobj()
  6. Java和PyPy速度对比
  7. MySQL配置文件-my.ini
  8. 简单粗暴的“Debug模式”
  9. Radis安装
  10. centos下彻底删除mysql的方法
  11. oldboy s21day12.设计商城系统,主要提供两个功能:商品管理、会员管理。
  12. js for 循环示例
  13. Netty从入门到精通到放弃
  14. Android获取版本号
  15. Linux学习笔记:Tomcat安装与使用
  16. [python]关于在python中模块导入问题追加总结
  17. JSTL—标签
  18. Spring3.1.2与Hibernate4.1.8整合
  19. jstl foreach 取index
  20. MySQL 存储过程理解

热门文章

  1. 干净卸载mysql
  2. 01背包【p1060】开心的金明
  3. hiho一下第133周 2-SAT&#183;hihoCoder音乐节(2-SAT)(强连通)
  4. 使用CXF开发RESTFul服务
  5. BZOJ 3864 Hero Meets Devil
  6. Android SDK 目录说明
  7. 理解Promise简单实现的背后原理
  8. spring-hadoop-samples
  9. Bloom Filter的应用
  10. [转载]Install Opera 12.16 Web Browser in CentOS/RHEL and Fedora