MDA/MDD/TDD/DDD/DDDDDDD
          posts - 536, comments - 111, trackbacks - 0, articles - 0
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          poi筆記

          Posted on 2008-03-14 22:26 leekiang 閱讀(4171) 評論(0)  編輯  收藏 所屬分類: 文件處理
          注意用poi解析器從word中抽取文本后,輸入流會關閉,原因如下:
          InputStreams passed to POIFSFileSystem are now automatically closed. A warning is generated for people who might've relied on them not being closed before, and a wrapper to restore the old behaviour is supplied(POI-DEVELOPERS)
          據說在POI3.0.3會修正該問題。

          1,poi格子里的文本如何換行
          ? 加"\n",同時設置style.setWrapText(true);
          ?
          2,style.setFillForegroundColor(HSSFColor.GREY_25_PERCENT.index);
          ?style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
          ?設置前景色,有半透明的效果
          ?
          3,sheet.addMergedRegion(new Region(0, (short) 0, 0, (short) 1));// 起始cell行、起始cell列、結束cell行、結束cell列。
          ?? 被合并了的單元格不需要生成。
          ?? 單元格合并後設置邊框只在原第一個上有效,如果想應用的合并後的整體,則需要一個個的Create出單元格并應用樣式,這個明顯是一個不太方便的操作,期待POI下一版的改進了
          ?? 注意行是y軸,列是x軸。
          ?? poi-contrib下的HSSFRegionUtil可以設置合并區域的邊框的顏色和樣式
          例如:HSSFRegionUtil.setLeftBorderColor(HSSFColor.BLACK.index,row,sheet,wb);

          4,sheet.createFreezePane(2, 1);
          ? 凍結窗口,左上角為行參和列參的起始處,從0開始
          ?
          5,列寬sheet.setColumnWidth((short) 0, (short) (35.7 * 110));//第一個參數為列的下標,110為想設置的寬度像素。
          ? http://www.cnblogs.com/interboy/archive/2007/08/27/872028.html

          6,行高row.setHeight((short) (15.625 * 100));//100為要設置的行高的像素
          ?? row.setHeightInPoints((short)100);//應該可以達到同樣的效果

          7, POI將註解的部分,視做一個文字方塊,我們可以設定它的大小及內容,然後將之指定給某特定的Cell。
          節錄部分Code如下:
          HSSFPatriarch patr = sheet.createDrawingPatriarch();
          HSSFComment comment = patr.createComment(new HSSFClientAnchor(0, 0, 0, 0, (short)4, 2, (short) 8, rowCount));
          HSSFRichTextString str = new HSSFRichTextString("TEST");
          comment.setString(str);
          comment.setAuthor("TEST");
          cell.setCellComment(comment);

          8,sheet的中文名
          workbook.setSheetName(0,"統計",(short)1);//第三個參數為編碼方式,HSSFWorkbook.ENCODING_UTF_16=1
          sheet的名稱不允許出現重復。

          9, 先定義一個基本樣式,再復制樣式的屬性。不知何故不能clonebean
          ? HSSFCellStyle headerStyle = workbook.createCellStyle();
          ? PropertyUtils.copyProperties(headerStyle, baseStyle);//

          10, 輸出,中文名
          ??????? response.reset();
          ?? ??? ?response.setContentType("applicationnd.ms-excel");
          ?? ??? ?response.addHeader("Content-disposition",
          ?? ??? ??? ??? ?"attachment;filename="+new String("統計".getBytes("GBK"), "ISO-8859-1")+".xls");
          ?? ??? ?ServletOutputStream out = response.getOutputStream();
          ?? ??? ?workbook.write(out);
          ?? ??? ?out.flush();
          ?? ??? ?out.close();

          11,cell.setCellValue(new HSSFRichTextString("測試"));
          在poi2.5.1里不管用,只能用cell.setCellValue("測試");
          忘了二者有何區別

          12,直接用workbook.getBytes()得到的文檔內容的結構是有問題的,會導致打開xls時報錯。
          ByteArrayOutputStream bos = new ByteArrayOutputStream();
          workBook.write(bos);
          //ByteArrayInputStream is = new ByteArrayInputStream(workBook.getBytes());//錯誤
          ByteArrayInputStream is = new ByteArrayInputStream(bos.toByteArray());//正確
          詳見 http://numenzq.javaeye.com/blog/218816

          13,POI的老版本的下載地址:http://archive.apache.org/dist/jakarta/poi/release/bin

          14,每個sheet有65536的最大行數限制?
          ?? 數據量非常大時,拆分為多個sheet(每個1萬行)可顯著降低內存占用。
          ?? http://www.javaeye.com/topic/74835?page=3

          15,可用PropertyUtils.copyProperties(newStyle, baseStyle)把baseStyle的屬性拷貝到newStyle中,但Font等拷貝不了。(淺拷貝,深拷貝?)

          16,POI如何復制行,設置分頁符bug? 使用POI操作Excel的幾點注意事項
          和http://www.aygfsteel.com/liaojiyong/archive/2007/11/14/160588.html

          17,復制行,復制sheet
          http://zhidao.baidu.com/question/66868683.html
          http://www.aub.org.cn/J2SE/Article137612.html
          http://zhidao.baidu.com/question/42447398.html

          18,用HSSFCell的getCellType()只能判斷三種類型,返回值為int ? 0,1,2 ?
          ? numeric(0), ? formula(2) ? or ? string(1) ?
          ? 但是僅僅依靠這個有時候不能完全解決問題, ?
          ? 有時候需要用HSSFDataFormat來共同判斷: ?
          ??? cell.getCellStyle().getDataFormat()
          見http://poi.apache.org/apidocs/org/apache/poi/ss/usermodel/BuiltinFormats.html
          ? https://svn.apache.org/repos/asf/poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFDateUtil.java


          19,poi3.2把以下屬性或方法刪掉了:
          HSSFWorkbook.ENCODING_UTF_16
          cell.setEncoding
          所以還是繼續用poi3.0.2吧
          ?? ??? ?
          http://blog.csdn.net/impeller/archive/2007/10/29/1855368.aspx
          解析Excel注釋,填充并生成報表的一個例子
          http://hi.baidu.com/bluewhale84/blog/item/b9ebd5c295911130e4dd3bd0.html
          http://kevintuntun.bokee.com/2692649.html
          http://www.ccw.com.cn/htm/center/prog/02_10_22_2.asp
          http://llying.javaeye.com/blog/171455
          http://hi.baidu.com/fish1996/blog/item/71412181e9825bdabd3e1eed.html(toutf8string)
          poi的一個讓人失望的bug

          openxml4j支持excel2007


          主站蜘蛛池模板: 东港市| 介休市| 唐海县| 汽车| 仁怀市| 崇义县| 简阳市| 朝阳区| 太康县| 西安市| 凉山| 凤山市| 普兰店市| 东至县| 马鞍山市| 黑龙江省| 庆云县| 京山县| 沈丘县| 瑞昌市| 高雄市| 同德县| 芒康县| 新乡市| 桦甸市| 泽普县| 宜昌市| 阜宁县| 洛川县| 万载县| 夏河县| 马公市| 蕉岭县| 西城区| 枞阳县| 青州市| 北流市| 青铜峡市| 乾安县| 鞍山市| 中方县|