最近在做一个导出模板的功能,需要限制用户的某些单元格输入的内容。

期望达到的效果:单元格中出现下拉选择,或输入错误时提示。

翻阅了许多资料,终于得到了答案。

然后自己整理下边一些方法,记录下来方便以后使用。

第一种

· 直接设置下拉值,不超过255个字符(优点:逻辑简单 ;缺点:有字符限制)

· 适用于下拉值为固定值,例如:状态、性别等

方法块:

public static void SetCellDropdownList(ISheet sheet, int firstcol, int lastcol, string[] vals)
{//设置生成下拉框的行和列var cellRegions = new CellRangeAddressList(1, 65535, firstcol, lastcol);//设置 下拉框内容DVConstraint constraint = DVConstraint.CreateExplicitListConstraint(vals);//绑定下拉框和作用区域,并设置错误提示信息HSSFDataValidation dataValidate = new HSSFDataValidation(cellRegions, constraint);dataValidate.CreateErrorBox("输入不合法", "请输入或选择下拉列表中的值。");dataValidate.ShowPromptBox = true;sheet.AddValidationData(dataValidate);
}

调用:

HSSFWorkbook workbook = new HSSFWorkbook();
ISheet sheet = workbook.CreateSheet("sheet1");
ExcelHelper.SetCellDropdownList(sheet, 1, 1, new List<string>() { "男", "女", "保密" }.ToArray());

第二种

· 通过绑定值到sheet中设置下拉

· 适用于数据较多,或灵活控制的值,例如:城市区域、数据表信息等。

方法块:

public static void SetCellDropdownList(HSSFWorkbook workbook, ISheet sheet, string name, int firstcol, int lastcol, string[] vals, int sheetindex = 1)
{//先创建一个Sheet专门用于存储下拉项的值ISheet sheet2 = workbook.CreateSheet(name);//隐藏workbook.SetSheetHidden(sheetindex, true);int index = 0;foreach (var item in vals){sheet2.CreateRow(index).CreateCell(0).SetCellValue(item);index++;}//创建的下拉项的区域:var rangeName = name + "Range";IName range = workbook.CreateName();range.RefersToFormula = name + "!$A$1:$A$" + index;range.NameName = rangeName;CellRangeAddressList regions = new CellRangeAddressList(0, 65535, firstcol, lastcol);DVConstraint constraint = DVConstraint.CreateFormulaListConstraint(rangeName);HSSFDataValidation dataValidate = new HSSFDataValidation(regions, constraint);dataValidate.CreateErrorBox("输入不合法", "请输入或选择下拉列表中的值。");dataValidate.ShowPromptBox = true;sheet.AddValidationData(dataValidate);
}

调用:

HSSFWorkbook workbook = new HSSFWorkbook();
ISheet sheet = workbook.CreateSheet("sheet1");
var roomTypeList = GetRoomTypeNameList();
ExcelHelper.SetCellDropdownList(workbook, sheet, "RoomTypeDictionary", 1, 1, roomTypeList.ToArray());

另外,延伸联动下拉(直接贴源码了)

方法块:

private void SetCityCellDropdownList(HSSFWorkbook workbook, ISheet sheet, string dictionaryName, int citycol, int areacol, int sheetIndex)
{var citylist = GetCityList();int citycount = citylist.Count;ISheet sheet2 = workbook.CreateSheet(dictionaryName);//隐藏workbook.SetSheetHidden(sheetIndex, true);#region 城市区域数据构造//城市int rowIndex = 0;foreach (var item in citylist){IRow row = sheet2.CreateRow(rowIndex);row.CreateCell(0).SetCellValue(item.Name);rowIndex++;}//区域int n_rowIndex = 0;foreach (var item in citylist){int areaIndex = 0;foreach (var area in item.AreaList){IRow row = sheet2.GetRow(areaIndex);if (row == null){row = sheet2.CreateRow(areaIndex);}row.CreateCell(n_rowIndex + 1).SetCellValue(area.Name);areaIndex++;}n_rowIndex++;}#endregion#region 设置数据字段范围//定义城市int columnIndex = 1;IName range_Country = workbook.CreateName();range_Country.RefersToFormula = string.Format("{0}!${1}$1:${1}${2}", dictionaryName, GetExcelColumnName(columnIndex), citycount);range_Country.NameName = "城市";//定义区foreach (var item in citylist){int areacount = item.AreaList.Count;columnIndex++;IName range_area = workbook.CreateName();range_area.RefersToFormula = string.Format("{0}!${1}$1:${1}${2}", dictionaryName, GetExcelColumnName(columnIndex), areacount);range_area.NameName = item.Name;}//城市列表下拉绑定ExcelHelper.SetCellDropdownList(sheet, 1, 65535, citycol, citycol, "城市");//第二列,跟随第一列联动string colName = GetExcelColumnName(areacol);for (int j = 1; j < 500; j++){ExcelHelper.SetCellDropdownList(sheet, j, j, areacol, areacol, string.Format("INDIRECT(${0}${1})", colName, j + 1));}#endregion
}private string GetExcelColumnName(int columnNumber)
{int dividend = columnNumber;string columnName = String.Empty;int modulo;while (dividend > 0){modulo = (dividend - 1) % 26;columnName = Convert.ToChar(65 + modulo).ToString() + columnName;dividend = (int)((dividend - modulo) / 26);}return columnName;
}
public static void SetCellDropdownList(ISheet sheet, int firstRow, int lastRow, int firstCol, int lastCol, string name)
{CellRangeAddressList regions = new CellRangeAddressList(firstRow, lastRow, firstCol, lastCol);DVConstraint constraint = DVConstraint.CreateFormulaListConstraint(name);HSSFDataValidation dataValidate = new HSSFDataValidation(regions, constraint);dataValidate.CreateErrorBox("输入不合法", "请输入或选择下拉列表中的值。");sheet.AddValidationData(dataValidate);
}

调用:

HSSFWorkbook workbook = new HSSFWorkbook();
ISheet sheet = workbook.CreateSheet("sheet1");
SetCityCellDropdownList(workbook, sheet, "CityDictionary", 1, 2, 1);

完。

NPOI设置Excel下拉选项相关推荐

  1. C#之NPOI设置Excel下拉

    背景 导出Excel其实是很常见的,但以前就是很简单将数据导出到Excel,做的最多的就是文字居中.栏位自适应.设置数据类型,其实很少会有设置Excel下拉这种,但用户的需求,而且这也算是Excel比 ...

  2. WPS设置Excel下拉选项

    首先将鼠标移动需要设置下拉选项的列上,比如:下方红框圈起来的位置: 鼠标移动到此位置会出现向下的箭头,此时鼠标左键单击选中这一列,再按住Ctrl键同时鼠标左键点击题库类型这个单元格取消标题的选中,如下 ...

  3. java实现设置Excel下拉框在使用Excel的时候用到了下拉框,实现的效果如下↓

    在使用Excel的时候用到了下拉框,实现的效果如下↓ 在生成excel文件时,需要根据给出的下拉框选项列表动态生成下拉框.实现代码如下: private void createSelect(XSSFW ...

  4. JAVA设置excel下拉框默认值,Java设置Excel数据验证(下拉列表)

    测试Excel表格设置数据下拉列表 /** * 功能描述: 测试Excel表格设置数据下拉列表 * * @author Jack_Liberty * @date 2021-02-21 16:30 */ ...

  5. 使用【宏】设置excel 下拉框可进行多选

    宏代码: Private Sub Worksheet_Change(ByVal Target As Range) ' Developed by Contextures Inc. ' www.conte ...

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

    如何在Excel的单元格中加入下拉选项 方法/步骤 第一步:打开excel文档,选中需加入下拉选项的单元格. 第二步:点击菜单中的"数据"->"数据有效性" ...

  7. excel单元格下拉选项怎么设置_使用Excel制作搜索式下拉菜单,让你不再烦恼下拉选项多内容...

    中岁颇好道,晚家南山陲.兴来每独往,胜事空自知.行到水穷处,坐看云起时.偶然值林叟,谈笑无还期. --[唐] 王维<终南别业> 下拉菜单,相信大家一定不陌生. 当我们需要快速输入数据内容, ...

  8. EXCEL2016设置下拉选项,图文说明

    打开一个excel表,选中需要设置下拉选项的区域: 在Excel表的菜单选项中找到"数据",数据菜单下方的工具栏中找到"数据工具"板块: 点击数据工具选项里的& ...

  9. Excel单元格如何增加下拉选项(类似于web中的select选项框)

    ☀效果图 1.选择待加[下拉选项]的单元格,依次点击数据 - 数据有效性(小三角▼)- 数据有效性 2.在弹出框中[设置]栏[允许]下拉框中选择"序列" 3.在[来源]输入框中输入 ...

最新文章

  1. 《TensorFlow技术解析与实战》——第3章 可视化TensorFlow 3.1PlayGround
  2. Host Switch Plus结合nginx使用
  3. docker compose 停止_Docker-Compose 基础与实战,看这一篇就够啦
  4. 第1章 计算机基础知识习题答案,职称计算机基础知识习题第一章
  5. awx文件解析_Android so(ELF)文件解析
  6. 机器学习基础自学笔记2
  7. 《COM原理与应用》学习笔记二——COM对象和COM接口的实现
  8. java获取web项目的绝对路径的方法总结
  9. 代码理解(2009.11.20)
  10. LSB最低有效位算法实现
  11. 洛谷P3216 [HNOI2011]数学作业
  12. 电阻器颜色代码在线计算机,色环电阻计算器
  13. 给信号添加指定信噪比的带限白噪声
  14. 局域网组网 | 交换机常用命令
  15. docker 暴露端口 查看_Docker容器如何暴露端口
  16. apn(Access Point Name, 接入点名称)简介
  17. 计算机网络基础--网络体系结构
  18. java开发系统内核:放大招!为系统开发星球大战游戏程序
  19. 网易邮箱服务器怎么注册,按照这个步骤操作,轻松注册自己的邮箱,赶紧收藏吧...
  20. java/php/net/python宅急送管理系统设计

热门文章

  1. 疲劳检测,基于视频的疲劳检测、脱岗、打呵欠、闭眼、点头等检测
  2. matplotlib 点线动画
  3. 解决主机和虚拟机相互ping通,但是虚拟机无法上网
  4. 科学减肥新方法——红光光浴#大健康#红光光浴#红光#种光光学
  5. 互联网医院系统搭建,打造在线问诊系统新模式
  6. 微信小程序radio单选框
  7. 安卓期末大作业Android studio-记单词app(资源链接在文末,含注册登录,含设计报告,含导出app文件及源码导入方法文档)
  8. 腾讯音乐娱乐数据分析4.15笔试
  9. VHDL矩阵键盘扫描数码管显示
  10. 圣诞节来了,用Python Turtle画棵圣诞树吧