NPOI 添加下拉列表

需求

給指定列添加下拉列表。以下圖:html

思路

  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);
        }

調用以客戶列舉例git

// 獲取客戶列表
    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);

參考資料:github

  1. POI官方文檔
  2. 做者tonyqus的NPOI官方Github
相關文章
相關標籤/搜索