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);//雷猴,終於種完地了,回家睡覺
}