中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java怎么導出Excel增加下拉框選項

發布時間:2022-04-28 13:44:28 來源:億速云 閱讀:1418 作者:iii 欄目:開發技術

今天小編給大家分享一下Java怎么導出Excel增加下拉框選項的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

excel對于下拉框較多選項的,需要使用隱藏工作簿來解決,使用函數取值來做選項

選項較少(一般少于5個):

private static DataValidation setFewDataValidation(Sheet sheet, String[] textList, int firstRow, int endRow, int firstCol, int endCol) {
    DataValidationHelper helper = sheet.getDataValidationHelper();
    //加載下拉列表內容
    DataValidationConstraint constraint = helper.createExplicitListConstraint(textList);
    constraint.setExplicitListValues(textList);
    //設置數據有效性加載在哪個單元格上。四個參數分別是:起始行、終止行、起始列、終止列
    CellRangeAddressList regions = new CellRangeAddressList((short) firstRow, (short) endRow, (short) firstCol, (short) endCol);
    //數據有效性對象
    return helper.createValidation(constraint, regions);
}

選項較多

創建隱藏工作簿:

Sheet sheetHidden = wb.createSheet("Sheet2");
wb.setSheetHidden(1, true);

每一個列表占用一列

當然也可以每個列表使用一張工作簿,只用第一列。 這里是使用一個工作簿使用每個列,先26個字母,一般夠用了

String[] arr = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"};
for (int j = 0; j < dataList.size(); j++) {
    if (index == 0) { //第1個下拉選項,直接創建行、列
        row = sheetHidden.createRow(j); //創建數據行
        //      sheetHidden.setColumnWidth(j, 4000); //設置每列的列寬
        row.createCell(0).setCellValue(dataList.get(j)); //設置對應單元格的值
    } else { //非第1個下拉選項
        int rowCount = sheetHidden.getLastRowNum();
        if (j <= rowCount) { //前面創建過的行,直接獲取行,創建列
            //獲取行,創建列
            sheetHidden.getRow(j).createCell(index).setCellValue(dataList.get(j)); //設置對應單元格的值

        } else { //未創建過的行,直接創建行、創建列
            //  sheetHidden.setColumnWidth(j, 4000); //設置每列的列寬
            //創建行、創建列
            sheetHidden.createRow(j).createCell(index).setCellValue(dataList.get(j)); //設置對應單元格的值
        }
    }
}

index 代表第幾個下拉框,也就是在隱藏工作簿的第幾列,dataList表示下拉框的內容

創建公式:

String strFormula = "Sheet2!$" + arr[index] + "$1:$" + arr[index] + "$" + dataList.size();

Sheet2第A1到A5000作為下拉列表來源數據

xls和xlsx生成下拉框的選項不一樣

private static DataValidation setMoreDataValidation(Workbook wb, Sheet sheet, String strFormula, int startRow, int endRow, int startColumn, int endColumn) {

    DataValidation dataValidation;
    // 設置數據有效性加載在哪個單元格上,四個參數分別是:起始行、終止行、起始列、終止列
    CellRangeAddressList regions = new CellRangeAddressList(startRow, endRow, startColumn, endColumn);
    if (wb instanceof XSSFWorkbook) {
        //獲取新sheet頁內容
        XSSFDataValidationConstraint constraint = new XSSFDataValidationConstraint(DataValidationConstraint.ValidationType.LIST, strFormula);
        // 設置數據有效性加載在哪個單元格上,四個參數分別是:起始行、終止行、起始列、終止列
        // 數據有效性對象
        DataValidationHelper help = new XSSFDataValidationHelper((XSSFSheet) sheet);
        dataValidation = help.createValidation(constraint, regions);
        dataValidation.setSuppressDropDownArrow(true);
        dataValidation.setShowErrorBox(true);
    } else {
        // 設置數據有效性加載在哪個單元格上。四個參數分別是:起始行、終止行、起始列、終止列
        DVConstraint constraint = DVConstraint.createFormulaListConstraint(strFormula);
        dataValidation = new HSSFDataValidation(regions, constraint);
        dataValidation.setSuppressDropDownArrow(false);
    }
    dataValidation.setEmptyCellAllowed(true);
    dataValidation.setShowPromptBox(true);
    dataValidation.createErrorBox("Error", "請選擇下拉框中的數據");
    dataValidation.createPromptBox("提示", "只能選擇下拉框里面的數據");
    return dataValidation;

}

加入工作簿:

sheet.addValidationData()

完整代碼:

private static void setValidationDate(Workbook wb, Sheet sheet, List<DataValidationCell> dataValidationCellList) {
    if (dataValidationCellList.isEmpty()) {
        return;
    }
    String[] arr = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"};
    int index = 0;
    Row row;
    Sheet sheetHidden = wb.createSheet("Sheet2");
    wb.setSheetHidden(1, true);
    for (DataValidationCell dataValidationCell : dataValidationCellList) {
        List<String> dataList = dataValidationCell.getDataList();
        if (CollectionUtils.isEmpty(dataList)) {
            continue;
        }
        if (dataList.size() <= 5) {
            sheet.addValidationData(setFewDataValidation(sheet, dataList.toArray(new String[0]),
                    dataValidationCell.getStartRow(), dataValidationCell.getEndRow(),
                    dataValidationCell.getStartColumn(), dataValidationCell.getEndColumn())); //超過255個報錯
        } else {
            //String strFormula = "Sheet2!$A$1:$A$5000" ; //Sheet2第A1到A5000作為下拉列表來源數據
            String strFormula = "Sheet2!$" + arr[index] + "$1:$" + arr[index] + "$" + dataList.size(); //Sheet2第A1到A5000作為下拉列表來源數據
            sheet.addValidationData(setMoreDataValidation(wb, sheet, strFormula,
                    dataValidationCell.getStartRow(), dataValidationCell.getEndRow(),
                    dataValidationCell.getStartColumn(), dataValidationCell.getEndColumn())); //下拉列表元素很多的情況
            //2、生成sheet2內容
            for (int j = 0; j < dataList.size(); j++) {
                if (index == 0) { //第1個下拉選項,直接創建行、列
                    row = sheetHidden.createRow(j); //創建數據行
                    //      sheetHidden.setColumnWidth(j, 4000); //設置每列的列寬
                    row.createCell(0).setCellValue(dataList.get(j)); //設置對應單元格的值
                } else { //非第1個下拉選項
                    int rowCount = sheetHidden.getLastRowNum();
                    if (j <= rowCount) { //前面創建過的行,直接獲取行,創建列
                        //獲取行,創建列
                        sheetHidden.getRow(j).createCell(index).setCellValue(dataList.get(j)); //設置對應單元格的值
                    } else { //未創建過的行,直接創建行、創建列
                        //  sheetHidden.setColumnWidth(j, 4000); //設置每列的列寬
                        //創建行、創建列
                        sheetHidden.createRow(j).createCell(index).setCellValue(dataList.get(j)); //設置對應單元格的值
                    }
                }
            }
            index++;
        }
    }
}
public static class DataValidationCell{
    private int startRow;
    private int endRow;
    private int startColumn;
    private int endColumn;
    private List<String> dataList;
}

以上就是“Java怎么導出Excel增加下拉框選項”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

谢通门县| 柳江县| 岫岩| 开化县| 徐水县| 汝南县| 辽阳市| 新河县| 陇南市| 西乌珠穆沁旗| 碌曲县| 九龙坡区| 顺昌县| 灵寿县| 靖江市| 中西区| 湖州市| 邹城市| 格尔木市| 新和县| 河间市| 黄山市| 含山县| 遂川县| 象州县| 治县。| 延津县| 大丰市| 湘潭县| 五常市| 英吉沙县| 桐城市| 略阳县| 新蔡县| 垣曲县| 台北县| 开封县| 乌拉特中旗| 红河县| 汉寿县| 双柏县|