POI導出Excel時,下拉列表值長度過長會報錯,解決代碼如下:
1.多創建一個sheet存儲下拉框的內容名為hidden,
2.從hidden表中加載數據并引用到下拉框
3.隱藏hidden
HSSFWorkbook workbook = new HSSFWorkbook();//從流內容創建Workbook對象 ISheet sheet = workbook.CreateSheet("Sheet1");//創建工作表 #region 所屬分級 //設置生成下拉框的行和列 CellRangeAddressList cellRegionsLevel = new CellRangeAddressList(1, 60000, 12, 12); //設置 下拉框內容 DVConstraint constraintcLevel = DVConstraint.CreateExplicitListConstraint( levelNames.ToArray()); ISheet hidden = workbook.CreateSheet("hidden"); string[] productNameArray = levelNames.ToArray(); //創建單元格對象 ICell cell = null; //遍歷我們上面的數組,將數據取出來放到新sheet的單元格中 for (int i = 0, length = productNameArray.Length; i < length; i++) { //取出數組中的每個元素 String name = productNameArray[i]; //根據i創建相應的行對象(說明我們將會把每個元素單獨放一行) IRow row1 = hidden.CreateRow(i); //創建每一行中的第一個單元格 cell = row1.CreateCell(0); //然后將數組中的元素賦值給這個單元格 cell.SetCellValue(name); } IName namedCell = workbook.CreateName(); namedCell.NameName = "hidden"; // 設置名稱引用的公式 namedCell.RefersToFormula = "hidden!$A$1:$A$" + productNameArray.Length; //加載數據,將名稱為hidden的sheet中的數據轉換為List形式 DVConstraint constraintlever = DVConstraint.CreateFormulaListConstraint("hidden"); // 設置第一列的3-65534行為下拉列表 // (3, 65534, 0, 0) ====> (起始行,結束行,起始列,結束列) CellRangeAddressList regions = new CellRangeAddressList(1, 60000, 12, 12); // 將設置下拉選的位置和數據的對應關系 綁定到一起 HSSFDataValidation dataValidation = new HSSFDataValidation(regions, constraintlever); //將第二個sheet設置為隱藏 workbook.SetSheetHidden(1, true); //將數據賦給下拉列表 sheet.AddValidationData(dataValidation);
浙公網安備 33010602011771號