poi excel 級聯下拉導出

在使用此方法時須要在excel定義好公式,若是有多個級聯 在添加驗證數據中增長數據有效性便可
setDataValidation方法中 size 表示你要生成多少行數據


/**
 * 添加數據驗證選項
 */
private void setDataValidation(Sheet sheet,Integer size){

    DataValidation data_validation_list = null;
    //省份選項添加驗證數據
    for(int a = 1;a < size;a++){
        //添加驗證數據  第一級下拉 
    //第一個參數 在excel中設置的公式名稱 第二個參數第幾行 第三個參數 第幾列
        data_validation_list = getDataValidationByFormula('省',a,1);
        sheet.addValidationData(data_validation_list);
        //添加驗證數據 第二級下拉
    //第一個參數 級聯至V列a行,格式爲$列號$行號,不然在wps中級聯會失效
    //第二個參數第幾行 第三個參數第幾列
        data_validation_list = getDataValidationByFormula("INDIRECT($V$"+a+")",a,2);
        sheet.addValidationData(data_validation_list);
    }
}
/**
 * 使用已定義的數據源方式設置一個數據驗證
 * @param formulaString
 * @param naturalRowIndex
 * @param naturalColumnIndex
 * @return
 */
private DataValidation getDataValidationByFormula(String formulaString,int naturalRowIndex,int naturalColumnIndex){
    //加載下拉列表內容
    DVConstraint constraint = DVConstraint.createFormulaListConstraint(formulaString);
    //設置數據有效性加載在哪一個單元格上。
    //四個參數分別是:起始行、終止行、起始列、終止列
    int firstRow = naturalRowIndex-1;
    int lastRow = naturalRowIndex-1;
    int firstCol = naturalColumnIndex;
    int lastCol = naturalColumnIndex;
    CellRangeAddressList regions=new CellRangeAddressList(firstRow,lastRow,firstCol,lastCol);
    //數據有效性對象
    DataValidation data_validation_list = new HSSFDataValidation(regions,constraint);
    return data_validation_list;
}
相關文章
相關標籤/搜索