NPOI 添加下拉列表

需求

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

428620-20180409101358131-215852554.png

428620-20180409101429214-415592715.png

思路

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

428620-20180409101449065-544332403.png

代码

/// <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

转载于:https://www.cnblogs.com/David-Huang/p/8758145.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用NPOI生成Excel模板并具备下拉选项的步骤如下: 1.添加NPOI依赖包 在项目中添加NPOI的依赖包,可以通过Maven进行添加,也可以手动下载添加到项目中。 2.创建Excel模板文件 使用NPOI创建一个新的Excel文件,并创建一个Sheet。在Sheet中添加需要的表头和数据列。 3.设置下拉选项 使用NPOI提供的方法,设置需要添加下拉选项的单元格的数据校验规则。下面是示例代码: ``` //获取当前Sheet ISheet sheet = workbook.GetSheet("Sheet1"); //创建下拉列表数据 string[] data = new string[] { "选项1", "选项2", "选项3" }; var validation = sheet.GetDataValidationHelper().CreateValidation( sheet.GetDataValidationHelper().CreateExplicitListConstraint(data), new CellRangeAddressList(1, 100, 0, 0)); //设置下拉选项的单元格范围 //设置下拉选项的单元格样式 var style = workbook.CreateCellStyle(); style.DataFormat = HSSFDataFormat.GetBuiltinFormat("0"); style.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center; //将数据校验规则应用到单元格中 sheet.AddValidationData(validation); sheet.GetRow(1).CreateCell(0).CellStyle = style; ``` 4.保存Excel模板文件 使用NPOI提供的方法,将生成的Excel模板文件保存到本地或者输出到浏览器中供用户下载。下面是示例代码: ``` //保存Excel文件 using (var fileStream = new FileStream(filePath, FileMode.Create, FileAccess.Write)) { workbook.Write(fileStream); } ``` 完整的示例代码如下: ``` //创建Excel文件 var workbook = new HSSFWorkbook(); var sheet = workbook.CreateSheet("Sheet1"); //创建表头 var headerRow = sheet.CreateRow(0); headerRow.CreateCell(0).SetCellValue("选项"); //创建下拉列表数据 string[] data = new string[] { "选项1", "选项2", "选项3" }; var validation = sheet.GetDataValidationHelper().CreateValidation( sheet.GetDataValidationHelper().CreateExplicitListConstraint(data), new CellRangeAddressList(1, 100, 0, 0)); //设置下拉选项的单元格范围 //设置下拉选项的单元格样式 var style = workbook.CreateCellStyle(); style.DataFormat = HSSFDataFormat.GetBuiltinFormat("0"); style.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center; //将数据校验规则应用到单元格中 sheet.AddValidationData(validation); //添加数据行 for (int i = 1; i <= 10; i++) { var dataRow = sheet.CreateRow(i); dataRow.CreateCell(0).CellStyle = style; } //保存Excel文件 using (var fileStream = new FileStream(filePath, FileMode.Create, FileAccess.Write)) { workbook.Write(fileStream); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值