NPOI 設置下拉列表


HSSFWorkbook workbook = new HSSFWorkbook();//創建工作簿
ISheet sheet = workbook.CreateSheet();//創建sheet頁
var namelist = new string[] { "張三", "李四", "王五" };//創建一個數組作為數據源

var cellRegions = new CellRangeAddressList(5, 65535, 0, 0);//設置生成下拉框的行和列,從第6行到第65536行,從第0列到第0列

//Excel中允許輸入的序列來源長度最大為255個字符,也就是說當下拉項的總字符串長度超過255是將會出錯。所以我將下拉列表分為簡易列表和引用列表(設置下拉列表的數據源是某一個sheet頁)

1、簡易列表
DVConstraint constraint = DVConstraint.CreateExplicitListConstraint(namelist);//將下拉項作為一個數組傳給CreateExplicitListConstraint作為參數創建一個約束
HSSFDataValidation dataValidate = new HSSFDataValidation(cellRegions, constraint);//綁定下拉框和作用區域,並設置錯誤提示信息
dataValidate.CreateErrorBox("輸入不合法", "請輸入下拉列表中的值。");
dataValidate.ShowPromptBox = true;//顯示提示框
sheet.AddValidationData(dataValidate);//添加下拉列表

2、sheet列表

public void CreateDropdownlist(int firstRow, int col, string name, string[] strarray)
{
  ISheet sheet = WorkBook.CreateSheet(name);//先創建一個Sheet專門用於存儲下拉項的值
  WorkBook.SetSheetHidden(WorkBook.GetSheetIndex(name), SheetState.Hidden);//隱藏Sheet
  int index = 0;
  foreach (var str in strarray)//將下拉列表中的數據循環賦給sheet頁
  {
    sheet.CreateRow(index++).CreateCell(0).SetCellValue(str);
  }

  定義一個名稱,指向剛才創建的下拉項的區域:
  var rangeName = name + "Range";
  IName range = WorkBook.CreateName();
  range.RefersToFormula = name + "!$A$1:$A$" + (index == 0 ? 1 : index);
  range.NameName = rangeName;

  //-----------------分割線以上是用來創建一個sheet頁賦值,然后將sheet頁中的內容定義成一個名稱,后面用來當作數組傳入方法的過程-----------------------

  CellRangeAddressList cellRegions = new CellRangeAddressList(firstRow, 65535, col, col);//划一塊地,這塊地我要留着種黃瓜

  DVConstraint constraint = DVConstraint.CreateFormulaListConstraint(rangeName);//弄來了二斤瓜苗(補充一下:這里如果傳進來的是一堆瓜苗就直接用了,如果是傳回來的是一個字符串,比如說“翠花家”,我就去翠花找黃瓜去了)

  HSSFDataValidation dataValidate = new HSSFDataValidation(cellRegions , constraint);//把瓜苗種地里

  dataValidate.CreateErrorBox("輸入不合法", "請輸入或選擇下拉列表中的值。");//提示你挖錯了,我這是黃瓜地,茄子在隔壁翠花的地里
  dataValidate.ShowPromptBox = true;  

  WorkBook.GetSheetAt(0).AddValidationData(dataValidate);//雷猴,終於種完地了,回家睡覺
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM