最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java?導出Excel增加下拉框選項

 更新時間:2022年04月28日 16:50:59   作者:小小小LIN子  
這篇文章主要介紹了Java?導出Excel增加下拉框選項,excel對于下拉框較多選項的,需要使用隱藏工作簿來解決,使用函數(shù)取值來做選項,下文具體的操作詳情,需要的小伙伴可以參考一下

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

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

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

選項較多

創(chuàng)建隱藏工作簿:

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個下拉選項,直接創(chuàng)建行、列
        row = sheetHidden.createRow(j); //創(chuàng)建數(shù)據(jù)行
        //      sheetHidden.setColumnWidth(j, 4000); //設置每列的列寬
        row.createCell(0).setCellValue(dataList.get(j)); //設置對應單元格的值
    } else { //非第1個下拉選項
        int rowCount = sheetHidden.getLastRowNum();
        if (j <= rowCount) { //前面創(chuàng)建過的行,直接獲取行,創(chuàng)建列
            //獲取行,創(chuàng)建列
            sheetHidden.getRow(j).createCell(index).setCellValue(dataList.get(j)); //設置對應單元格的值

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

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

創(chuàng)建公式:

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

Sheet2第A1到A5000作為下拉列表來源數(shù)據(jù)

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

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

    DataValidation dataValidation;
    // 設置數(shù)據(jù)有效性加載在哪個單元格上,四個參數(shù)分別是:起始行、終止行、起始列、終止列
    CellRangeAddressList regions = new CellRangeAddressList(startRow, endRow, startColumn, endColumn);
    if (wb instanceof XSSFWorkbook) {
        //獲取新sheet頁內(nèi)容
        XSSFDataValidationConstraint constraint = new XSSFDataValidationConstraint(DataValidationConstraint.ValidationType.LIST, strFormula);
        // 設置數(shù)據(jù)有效性加載在哪個單元格上,四個參數(shù)分別是:起始行、終止行、起始列、終止列
        // 數(shù)據(jù)有效性對象
        DataValidationHelper help = new XSSFDataValidationHelper((XSSFSheet) sheet);
        dataValidation = help.createValidation(constraint, regions);
        dataValidation.setSuppressDropDownArrow(true);
        dataValidation.setShowErrorBox(true);
    } else {
        // 設置數(shù)據(jù)有效性加載在哪個單元格上。四個參數(shù)分別是:起始行、終止行、起始列、終止列
        DVConstraint constraint = DVConstraint.createFormulaListConstraint(strFormula);
        dataValidation = new HSSFDataValidation(regions, constraint);
        dataValidation.setSuppressDropDownArrow(false);
    }
    dataValidation.setEmptyCellAllowed(true);
    dataValidation.setShowPromptBox(true);
    dataValidation.createErrorBox("Error", "請選擇下拉框中的數(shù)據(jù)");
    dataValidation.createPromptBox("提示", "只能選擇下拉框里面的數(shù)據(jù)");
    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作為下拉列表來源數(shù)據(jù)
            String strFormula = "Sheet2!$" + arr[index] + "$1:$" + arr[index] + "$" + dataList.size(); //Sheet2第A1到A5000作為下拉列表來源數(shù)據(jù)
            sheet.addValidationData(setMoreDataValidation(wb, sheet, strFormula,
                    dataValidationCell.getStartRow(), dataValidationCell.getEndRow(),
                    dataValidationCell.getStartColumn(), dataValidationCell.getEndColumn())); //下拉列表元素很多的情況
            //2、生成sheet2內(nèi)容
            for (int j = 0; j < dataList.size(); j++) {
                if (index == 0) { //第1個下拉選項,直接創(chuàng)建行、列
                    row = sheetHidden.createRow(j); //創(chuàng)建數(shù)據(jù)行
                    //      sheetHidden.setColumnWidth(j, 4000); //設置每列的列寬
                    row.createCell(0).setCellValue(dataList.get(j)); //設置對應單元格的值
                } else { //非第1個下拉選項
                    int rowCount = sheetHidden.getLastRowNum();
                    if (j <= rowCount) { //前面創(chuàng)建過的行,直接獲取行,創(chuàng)建列
                        //獲取行,創(chuàng)建列
                        sheetHidden.getRow(j).createCell(index).setCellValue(dataList.get(j)); //設置對應單元格的值
                    } else { //未創(chuàng)建過的行,直接創(chuàng)建行、創(chuàng)建列
                        //  sheetHidden.setColumnWidth(j, 4000); //設置每列的列寬
                        //創(chuàng)建行、創(chuàng)建列
                        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增加下拉框選項的文章就介紹到這了,更多相關Java 增加下拉框內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • java String[]字符串數(shù)組自動排序的簡單實現(xiàn)

    java String[]字符串數(shù)組自動排序的簡單實現(xiàn)

    下面小編就為大家?guī)硪黄猨ava String[]字符串數(shù)組自動排序的簡單實現(xiàn)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-09-09
  • Spring Boot集成Sorl搜索客戶端的實現(xiàn)代碼

    Spring Boot集成Sorl搜索客戶端的實現(xiàn)代碼

    本篇文章主要介紹了Spring Boot集成Sorl搜索客戶端的實現(xiàn)代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-11-11
  • Java中Color和16進制字符串互相轉(zhuǎn)換的方法

    Java中Color和16進制字符串互相轉(zhuǎn)換的方法

    這篇文章主要給大家介紹了關于Java中Color和16進制字符串互相轉(zhuǎn)換的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-07-07
  • jar包加密方案分享

    jar包加密方案分享

    如何對jar包進行加密呢?其實沒有想象中的那么困難,有一款開源工具已經(jīng)提供了較為完善的加密方案,這款開源工具的名字叫做xjar。接下來我們就看一下使用xjar工具給jar包加密有多么的容易。
    2021-06-06
  • 淺談@RequestBody和@RequestParam可以同時使用

    淺談@RequestBody和@RequestParam可以同時使用

    這篇文章主要介紹了@RequestBody和@RequestParam可以同時使用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • java 單例的五種實現(xiàn)方式及其性能分析

    java 單例的五種實現(xiàn)方式及其性能分析

    這篇文章主要介紹了java 單例的五種實現(xiàn)方式及其性能分析。的相關資料,需要的朋友可以參考下
    2017-07-07
  • java實現(xiàn)中綴表達式轉(zhuǎn)后綴的方法

    java實現(xiàn)中綴表達式轉(zhuǎn)后綴的方法

    這篇文章主要為大家詳細介紹了java實現(xiàn)中綴表達式轉(zhuǎn)后綴的表達式方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • java String、StringBuilder和StringBuffer的區(qū)別詳解

    java String、StringBuilder和StringBuffer的區(qū)別詳解

    這篇文章主要介紹了java String、StringBuilder和StringBuffer的區(qū)別詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-01-01
  • Netty解決 TCP 粘包拆包的方法

    Netty解決 TCP 粘包拆包的方法

    處理粘包的唯一方法就是制定應用層的數(shù)據(jù)通訊協(xié)議,通過協(xié)議來規(guī)范現(xiàn)有接收的數(shù)據(jù)是否滿足消息數(shù)據(jù)的需要,本文給大家介紹Netty解決 TCP 粘包拆包的方法,需要的朋友一起看看吧
    2021-07-07
  • IDEA JetBrains Mono字體介紹和安裝教程(詳解)

    IDEA JetBrains Mono字體介紹和安裝教程(詳解)

    這篇文章主要介紹了IDEA JetBrains Mono字體介紹和安裝教程,本給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-03-03

最新評論

梁平县| 昌江| 绵竹市| 新竹县| 临湘市| 萨嘎县| 遂宁市| 章丘市| 保康县| 桦甸市| 盐亭县| 临夏县| 阿城市| 夏邑县| 滦南县| 阿尔山市| 临西县| 泗洪县| 南华县| 鸡西市| 高安市| 道孚县| 呈贡县| 华阴市| 昌平区| 雷州市| 鹤壁市| 万宁市| 淅川县| 冷水江市| 徐闻县| 珲春市| 西平县| 金门县| 江源县| 和静县| 于都县| 余江县| 八宿县| 新蔡县| 尉犁县|