excel2016設置單元格下拉選項工具類

 

	/**
	 * 單元格添加下拉菜單(不限制菜單可選項個數)<br/>
	 * [注意:此方法會添加隱藏的sheet,可調用getDataSheetInDropMenuBook方法獲取用戶輸入數據的未隱藏的sheet]<br/>
	 * [待添加下拉菜單的單元格 -> 以下簡稱:目標單元格]
	 * 
	 * @param @param workbook
	 * @param @param tarSheet 目標單元格所在的sheet
	 * @param @param menuItems 下拉菜單可選項數組
	 * @param @param firstRow 第一個目標單元格所在的行號(從0開始)
	 * @param @param lastRow 最後一個目標單元格所在的行(從0開始)
	 * @param @param column 待添加下拉菜單的單元格所在的列(從0開始)
	 */

	public static void addDropDownList(XSSFWorkbook workbook, XSSFSheet tarSheet, String[] menuItems, int firstRow,
			int lastRow, int column) throws Exception {

		if (null == workbook) {
			throw new Exception("workbook爲null");
		}
		if (null == tarSheet) {
			throw new Exception("待添加菜單的sheet爲null");
		}

		// 必須以字母開頭,最長爲31位
		String hiddenSheetName = "a" + UUID.randomUUID().toString().replace("-", "").substring(1, 31);
		// excel中的"名稱",用於標記隱藏sheet中的用作菜單下拉項的所有單元格
		String formulaId = "form" + UUID.randomUUID().toString().replace("-", "");
		XSSFSheet hiddenSheet = workbook.createSheet(hiddenSheetName);// 用於存儲 下拉菜單數據
		// 存儲下拉菜單項的sheet頁不顯示
		workbook.setSheetHidden(workbook.getSheetIndex(hiddenSheet), true);

		XSSFRow row = null;
		XSSFCell cell = null;
		// 隱藏sheet中添加菜單數據
		for (int i = 0; i < menuItems.length; i++) {
			row = hiddenSheet.createRow(i);
			// 隱藏表的數據列必須和添加下拉菜單的列序號相同,否則不能顯示下拉菜單
			cell = row.createCell(column);
			cell.setCellValue(menuItems[i]);
		}

		XSSFName namedCell = workbook.createName();// 創建"名稱"標籤,用於鏈接
		namedCell.setNameName(formulaId);
		namedCell.setRefersToFormula(hiddenSheetName + "!A$1:A$" + menuItems.length);
		XSSFDataValidationHelper dvHelper = new XSSFDataValidationHelper(tarSheet);
		DataValidationConstraint dvConstraint = dvHelper.createFormulaListConstraint(formulaId);

		CellRangeAddressList addressList = new CellRangeAddressList(firstRow, lastRow, column, column);
		HSSFDataValidation validation = (HSSFDataValidation) dvHelper.createValidation(dvConstraint, addressList);// 添加菜單(將單元格與"名稱"建立關聯)
		tarSheet.addValidationData(validation);
	}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章