記一次Java Poi使用事故

由于業(yè)務(wù)需求经磅,我需要處理一個(gè)excel表射众,讀取數(shù)據(jù)庫中的信息并作為下拉列表(即數(shù)據(jù)驗(yàn)證,舊版的叫數(shù)據(jù)有效性)添加到excel表中述暂。由于是新版的excel痹升, 這里就不考慮HSSF而是直接使用XSSF。
首先畦韭,由于我對(duì)poi疼蛾,xssf這個(gè)東西不熟,所以直接采用createExplicitListConstraint實(shí)現(xiàn)艺配,但是一開始就報(bào)錯(cuò)了察郁。打開生成的excel表提示:
"無法讀取表中的某些數(shù)據(jù),如果對(duì)其信任转唉,是否對(duì)數(shù)據(jù)源進(jìn)行修復(fù)皮钠?"
選擇“是”,就會(huì)發(fā)現(xiàn)彈出這樣一個(gè)提示:
"已刪除的功能:../../xx.xml赠法,的數(shù)據(jù)驗(yàn)證"
然后數(shù)據(jù)驗(yàn)證功能被完全刪除麦轰!
這是為什么呢?一開始砖织,我以為是編碼問題款侵,后來發(fā)現(xiàn)不是,又以為是中文問題侧纯,手動(dòng)測試后發(fā)現(xiàn)也不是新锈。難道是因?yàn)槌霈F(xiàn)了空格和特殊字符?都不是眶熬!我小心翼翼地測試妹笆,發(fā)現(xiàn)有時(shí)候報(bào)錯(cuò)有時(shí)候不報(bào)錯(cuò),但總體規(guī)律就是:數(shù)據(jù)驗(yàn)證的條數(shù)越多聋涨、每條的字?jǐn)?shù)越多晾浴,報(bào)錯(cuò)的幾率越大。
后面牍白,我終于知道了脊凰,這個(gè)它這個(gè)功能固有的缺陷,那怎么辦茂腥?方法就是改用createFormulaListConstraint狸涌,創(chuàng)建一個(gè)隱藏的sheet,并往里放入枚舉項(xiàng)最岗,然后在真正的sheet內(nèi)增加關(guān)聯(lián)關(guān)系帕胆!
具體的實(shí)現(xiàn)步驟如下:

public static Workbook XSSFSetDropDownAndHidden(String[] formulaString) {
        Workbook workbook = new XSSFWorkbook();
        XSSFSheet sheet = workbook.createSheet("mysheet");
        // 創(chuàng)建隱藏sheet,寫入枚舉項(xiàng)
        Sheet hideSheet = workbook.createSheet("hiddenSheet");
        for (int i = 0; i < formulaString.length; i++) {
            hideSheet.createRow(i).createCell(0).setCellValue(formulaString[i]);
        }
        // 創(chuàng)建名稱般渡,作用是被其他單元格引用
        Name categoryName = workbook.createName();
        categoryName.setNameName("hidden");
        // 設(shè)置名稱引用的公式
        categoryName.setRefersToFormula("hiddenSheet!" + "$A$1:$A$" + formulaString.length);
        //由于在hiddensheet中的每一行的第一個(gè)格子我們放入了等同于length的數(shù)據(jù)懒豹,所以這里用絕對(duì)引用第一列的1到length的數(shù)據(jù)
        // 設(shè)置下拉單位格范圍芙盘,第5列的1到1024
        CellRangeAddressList regions = new CellRangeAddressList(0,1024,4,4);
        //獲取數(shù)據(jù)
        XSSFDataValidationHelper dvHelper = (XSSFDataValidationHelper) sheet.getDataValidationHelper();
        XSSFDataValidationConstraint dvConstraint = (XSSFDataValidationConstraint)dvHelper.createFormulaListConstraint("hidden");
        //將數(shù)據(jù)關(guān)聯(lián)
        XSSFDataValidation dataValidation = (XSSFDataValidation)dvHelper.createValidation(dvConstraint,regions);
        //其他設(shè)置
        dataValidation.setSuppressDropDownArrow(true);
        dataValidation.setShowErrorBox(true);
        //添加到sheet中
        sheet.addValidationData(dataValidation);
        //設(shè)置隱藏
        workBook.setSheetHidden(1,true);
        return workbook;
    }

最后感謝博客園的"(00)"的博文。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末脸秽,一起剝皮案震驚了整個(gè)濱河市儒老,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌记餐,老刑警劉巖驮樊,帶你破解...
    沈念sama閱讀 221,820評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異片酝,居然都是意外死亡囚衔,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門雕沿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來练湿,“玉大人,你說我怎么就攤上這事晦炊【舷剩” “怎么了?”我有些...
    開封第一講書人閱讀 168,324評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵断国,是天一觀的道長。 經(jīng)常有香客問我榆苞,道長稳衬,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,714評(píng)論 1 297
  • 正文 為了忘掉前任坐漏,我火速辦了婚禮薄疚,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘赊琳。我一直安慰自己街夭,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,724評(píng)論 6 397
  • 文/花漫 我一把揭開白布躏筏。 她就那樣靜靜地躺著板丽,像睡著了一般。 火紅的嫁衣襯著肌膚如雪趁尼。 梳的紋絲不亂的頭發(fā)上埃碱,一...
    開封第一講書人閱讀 52,328評(píng)論 1 310
  • 那天,我揣著相機(jī)與錄音酥泞,去河邊找鬼砚殿。 笑死,一個(gè)胖子當(dāng)著我的面吹牛芝囤,可吹牛的內(nèi)容都是我干的似炎。 我是一名探鬼主播辛萍,決...
    沈念sama閱讀 40,897評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼羡藐!你這毒婦竟也來了贩毕?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,804評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤传睹,失蹤者是張志新(化名)和其女友劉穎耳幢,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體欧啤,經(jīng)...
    沈念sama閱讀 46,345評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡睛藻,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,431評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了邢隧。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片店印。...
    茶點(diǎn)故事閱讀 40,561評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖倒慧,靈堂內(nèi)的尸體忽然破棺而出按摘,到底是詐尸還是另有隱情,我是刑警寧澤纫谅,帶...
    沈念sama閱讀 36,238評(píng)論 5 350
  • 正文 年R本政府宣布炫贤,位于F島的核電站,受9級(jí)特大地震影響付秕,放射性物質(zhì)發(fā)生泄漏兰珍。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,928評(píng)論 3 334
  • 文/蒙蒙 一询吴、第九天 我趴在偏房一處隱蔽的房頂上張望掠河。 院中可真熱鬧,春花似錦猛计、人聲如沸唠摹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽勾拉。三九已至,卻和暖如春毛好,著一層夾襖步出監(jiān)牢的瞬間望艺,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評(píng)論 1 272
  • 我被黑心中介騙來泰國打工肌访, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留找默,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,983評(píng)論 3 376
  • 正文 我出身青樓吼驶,卻偏偏與公主長得像惩激,于是被迫代替她去往敵國和親店煞。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,573評(píng)論 2 359

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

  • 使用首先需要了解他的工作原理 1.POI結(jié)構(gòu)與常用類 (1)創(chuàng)建Workbook和Sheet (2)創(chuàng)建單元格 (...
    長城ol閱讀 8,445評(píng)論 2 25
  • ORA-00001: 違反唯一約束條件 (.) 錯(cuò)誤說明:當(dāng)在唯一索引所對(duì)應(yīng)的列上鍵入重復(fù)值時(shí)风钻,會(huì)觸發(fā)此異常顷蟀。 O...
    我想起個(gè)好名字閱讀 5,336評(píng)論 0 9
  • 國家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報(bào)批稿:20170802 前言: 排版 ...
    庭說閱讀 11,005評(píng)論 6 13
  • 轉(zhuǎn)自鏈接 目錄 1.認(rèn)識(shí)NPOI 2.使用NPOI生成xls文件 2.1創(chuàng)建基本內(nèi)容 2.1.1創(chuàng)建Workboo...
    腿毛褲閱讀 10,590評(píng)論 1 3
  • 轉(zhuǎn)自鏈接 2.3.5 IF函數(shù) 2.3.6 CountIf和SumIf函數(shù) 2.3.7 Lookup函數(shù) 2.3....
    腿毛褲閱讀 12,898評(píng)論 0 0