Java POI添加下拉選項(xiàng)

給自己打個廣告,最近弄了個Excel的工具代兵,支持下拉框尼酿,級聯(lián)下拉框,隱藏Sheet奢人,多線程大數(shù)據(jù)量導(dǎo)出谓媒,生產(chǎn)者消費(fèi)者模式讀取,代碼大部分都有注釋何乎,有興趣的朋友可以看看句惯,覺得不錯可以幫我弄個star什么的:smile:

方式

  1. 直接給單元格添加下拉框
  2. 使用隱藏Sheet的方式生成下拉框

直接添加下拉框

/**
     * 創(chuàng)建下拉列表選項(xiàng)(單元格下拉框數(shù)據(jù)小于255字節(jié)時使用)
     *
     * @param sheet    所在Sheet頁面
     * @param values   下拉框的選項(xiàng)值
     * @param firstRow 起始行(從0開始)
     * @param lastRow  終止行(從0開始)
     * @param firstCol 起始列(從0開始)
     * @param lastCol  終止列(從0開始)
     */
    public void createDropDownList(Sheet sheet, String[] values, int firstRow, int lastRow, int firstCol, int lastCol) {
        DataValidationHelper helper = sheet.getDataValidationHelper();
        CellRangeAddressList addressList = new CellRangeAddressList(firstRow, lastRow, firstCol, lastCol);
        DataValidationConstraint constraint = helper.createExplicitListConstraint(values);
        DataValidation dataValidation = helper.createValidation(constraint, addressList);
        if (dataValidation instanceof HSSFDataValidation ) {
            dataValidation.setSuppressDropDownArrow(false);
        } else {
            dataValidation.setSuppressDropDownArrow(true);
            dataValidation.setShowErrorBox(true);
        }
        sheet.addValidationData(dataValidation);
    }

需要注意的是,這種方式下拉框數(shù)據(jù)的大小不能超過255個字節(jié)支救,否則會報異常抢野。需要使用隱藏Sheet的方式解決

隱藏Sheet的方式

/**
     * 隱藏Sheet方式創(chuàng)建下拉框(單元格下拉框數(shù)據(jù)大于255字節(jié)時使用)
     *
     * @param sheet  需要添加下拉框的Sheet
     * @param firstRow 起始行
     * @param firstCol 其實(shí)列
     * @param endRow   終止行
     * @param endCol   終止列
     * @param dataArray  下拉框數(shù)組
     * @param wbCreat    所在excel的WorkBook,用于創(chuàng)建隱藏Sheet
     * @param hidddenSheetName    隱藏Sheet的名稱
     * @return
     */
    public void createDropDownListWithHiddenSheet(Sheet sheet, int firstRow,
                                                  int firstCol, int endRow,
                                                  int endCol, String[] dataArray,
                                                  Workbook wbCreat,
                                                  String hidddenSheetName) {

        Sheet hidden = wbCreat.createSheet(hidddenSheetName);
        Cell cell = null;
        for (int i = 0, length = dataArray.length; i < length; i++) {
            String name = dataArray[i];
            Row row = hidden.createRow(i);
            cell = row.createCell(0);
            cell.setCellValue(name);
        }
        Name namedCell = wbCreat.createName();
        namedCell.setNameName(hidddenSheetName);
        namedCell.setRefersToFormula(hidddenSheetName + "!$A$1:$A$" + dataArray.length);
        //sheet設(shè)置為隱藏
        wbCreat.setSheetHidden(wbCreat.getSheetIndex(hidden), true);
        //加載數(shù)據(jù),將名稱為hidden的
        DataValidationConstraint constraint = null;
        // 設(shè)置數(shù)據(jù)有效性加載在哪個單元格上,四個參數(shù)分別是:起始行各墨、終止行指孤、起始列、終止列
        CellRangeAddressList addressList = new CellRangeAddressList(firstRow, endRow, firstCol,
                endCol);
        // 創(chuàng)建 DataValidation
        DataValidation validation = null;
        if (sheet instanceof XSSFSheet || sheet instanceof SXSSFSheet) {
            DataValidationHelper dvHelper = sheet.getDataValidationHelper();
            constraint = dvHelper.createFormulaListConstraint(hidddenSheetName);
            validation = dvHelper.createValidation(constraint, addressList);
        } else {
            constraint = DVConstraint.createFormulaListConstraint(hidddenSheetName);
            validation = new HSSFDataValidation(addressList, constraint);
        }
        if (dataValidation instanceof HSSFDataValidation ) {
            dataValidation.setSuppressDropDownArrow(false);
        } else {
            dataValidation.setSuppressDropDownArrow(true);
            dataValidation.setShowErrorBox(true);
        }
        sheet.addValidationData(validation);
    }

在解析Excel數(shù)據(jù)的時候要注意忽略隱藏Sheet的數(shù)據(jù)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末贬堵,一起剝皮案震驚了整個濱河市恃轩,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌黎做,老刑警劉巖叉跛,帶你破解...
    沈念sama閱讀 211,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異蒸殿,居然都是意外死亡筷厘,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,347評論 3 385
  • 文/潘曉璐 我一進(jìn)店門宏所,熙熙樓的掌柜王于貴愁眉苦臉地迎上來酥艳,“玉大人,你說我怎么就攤上這事爬骤〕涫” “怎么了?”我有些...
    開封第一講書人閱讀 157,435評論 0 348
  • 文/不壞的土叔 我叫張陵霞玄,是天一觀的道長。 經(jīng)常有香客問我,道長蜕企,這世上最難降的妖魔是什么懊渡? 我笑而不...
    開封第一講書人閱讀 56,509評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮听隐,結(jié)果婚禮上补鼻,老公的妹妹穿的比我還像新娘。我一直安慰自己雅任,他們只是感情好风范,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,611評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著沪么,像睡著了一般硼婿。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上禽车,一...
    開封第一講書人閱讀 49,837評論 1 290
  • 那天寇漫,我揣著相機(jī)與錄音,去河邊找鬼殉摔。 笑死州胳,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的逸月。 我是一名探鬼主播栓撞,決...
    沈念sama閱讀 38,987評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼碗硬!你這毒婦竟也來了瓤湘?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,730評論 0 267
  • 序言:老撾萬榮一對情侶失蹤恩尾,失蹤者是張志新(化名)和其女友劉穎弛说,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體特笋,經(jīng)...
    沈念sama閱讀 44,194評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡剃浇,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,525評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了猎物。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片虎囚。...
    茶點(diǎn)故事閱讀 38,664評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖蔫磨,靈堂內(nèi)的尸體忽然破棺而出淘讥,到底是詐尸還是另有隱情,我是刑警寧澤堤如,帶...
    沈念sama閱讀 34,334評論 4 330
  • 正文 年R本政府宣布蒲列,位于F島的核電站窒朋,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏蝗岖。R本人自食惡果不足惜侥猩,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,944評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望抵赢。 院中可真熱鬧欺劳,春花似錦、人聲如沸铅鲤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,764評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽邢享。三九已至鹏往,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間骇塘,已是汗流浹背伊履。 一陣腳步聲響...
    開封第一講書人閱讀 31,997評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留绪爸,地道東北人湾碎。 一個月前我還...
    沈念sama閱讀 46,389評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像奠货,于是被迫代替她去往敵國和親介褥。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,554評論 2 349

推薦閱讀更多精彩內(nèi)容

  • 使用首先需要了解他的工作原理 1.POI結(jié)構(gòu)與常用類 (1)創(chuàng)建Workbook和Sheet (2)創(chuàng)建單元格 (...
    長城ol閱讀 8,411評論 2 25
  • 轉(zhuǎn)自鏈接 2.3.5 IF函數(shù) 2.3.6 CountIf和SumIf函數(shù) 2.3.7 Lookup函數(shù) 2.3....
    腿毛褲閱讀 12,863評論 0 0
  • 1.1 VBA是什么 直到90年代早期,使應(yīng)用程序自動化還是充滿挑戰(zhàn)性的領(lǐng)域.對每個需要自動化的應(yīng)用程序,人們不得...
    浮浮塵塵閱讀 21,726評論 6 49
  • VBA訂制工具欄 http://club.excelhome.net/thread-1047254-1-1.htm...
    大海一滴寫字的地方閱讀 2,242評論 0 0
  • 朋友圈里有一對夫妻递惋,女兒十歲左右上小學(xué)柔滔,他們還像熱戀中的小姑娘小伙子。他們是我那會兒還在賣衣服時候認(rèn)識的萍虽,做教...
    11cf2dbce83b閱讀 228評論 0 2