zoukankan      html  css  js  c++  java
  • NPOI 添加下拉列表

    需求

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

    思路

    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
  • 相关阅读:
    字节跳动软开校招岗
    众安保险软开校招岗
    topjui中combobox使用
    easyui中datagrid+layout布局
    jquery/js记录点击事件,单击次数加一,双击清零
    java图片上传及图片回显1
    java格式化
    java中的String整理
    删除window10没用的服务
    修改mysql默认端口
  • 原文地址:https://www.cnblogs.com/David-Huang/p/8758145.html
Copyright © 2011-2022 走看看