<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 22, comments - 17, trackbacks - 0, articles - 15
      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    一.POI簡介

    Jakarta POI 是apache的子項(xiàng)目,目標(biāo)是處理ole2對象。它提供了一組操縱Windows文檔的Java API

    目前比較成熟的是HSSF接口,處理MS Excel(97-2002)對象。它不象我們僅僅是用csv生成的沒有格式的可以由Excel轉(zhuǎn)換的東西,而是真正的Excel對象,你可以控制一些屬性如sheet,cell等等。

    二.HSSF概況

    HSSF 是Horrible SpreadSheet Format的縮寫,也即“討厭的電子表格格式”。也許HSSF的名字有點(diǎn)滑稽,就本質(zhì)而言它是一個非常嚴(yán)肅、正規(guī)的API。通過HSSF,你可以用純Java代碼來讀取、寫入、修改Excel文件。

    HSSF 為讀取操作提供了兩類API:usermodel和eventusermodel,即“用戶模型”和“事件-用戶模型”。前者很好理解,后者比較抽象,但操作效率要高得多。

    三.開始編碼

    1 . 準(zhǔn)備工作

    要求:JDK 1.4+POI開發(fā)包

    可以到 http://www.apache.org/dyn/closer.cgi/jakarta/poi/ 最新的POI工具包

    2 . EXCEL 結(jié)構(gòu)

    HSSFWorkbook excell 文檔對象介紹
    HSSFSheet excell的表單
    HSSFRow excell的行
    HSSFCell excell的格子單元
    HSSFFont excell字體
    HSSFName 名稱
    HSSFDataFormat 日期格式
    在poi1.7中才有以下2項(xiàng):
    HSSFHeader sheet頭
    HSSFFooter sheet尾
    和這個樣式
    HSSFCellStyle cell樣式
    輔助操作包括
    HSSFDateUtil 日期
    HSSFPrintSetup 打印
    HSSFErrorConstants 錯誤信息表

    3 .具體用法實(shí)例 (采用 usermodel )

    如何讀Excel

    讀取Excel文件時,首先生成一個POIFSFileSystem對象,由POIFSFileSystem對象構(gòu)造一個HSSFWorkbook,該HSSFWorkbook對象就代表了Excel文檔。下面代碼讀取上面生成的Excel文件寫入的消息字串:
    try{
    ?? POIFSFileSystem fs=new POIFSFileSystem(new FileInputStream("d:/workbook.xls"));
    ?? HSSFWorkbook wb = new HSSFWorkbook(fs);
    ?? HSSFSheet sheet = wb.getSheetAt(0);
    ?? HSSFRow row = sheet.getRow(0);
    ?? HSSFCell cell = row.getCell((short) 0);
    ?? String msg = cell.getStringCellValue();
    ?? System.out.println(msg);
    ? }catch(Exception e){
    ?? e.printStackTrace();
    ? }

    如何寫excel,

    將excel的第一個表單第一行的第一個單元格的值寫成“a test”。

    POIFSFileSystem fs =new POIFSFileSystem(new FileInputStream("workbook.xls"));

    ??? HSSFWorkbook wb = new HSSFWorkbook(fs);

    ??? HSSFSheet sheet = wb.getSheetAt(0);

    ??? HSSFRow row = sheet.getRow(0);

    ??? HSSFCell cell = row.getCell((short)0);

    ??? cell.setCellValue("a test");

    ??? // Write the output to a file

    ??? FileOutputStream fileOut = new FileOutputStream("workbook.xls");

    ??? wb.write(fileOut);

    fileOut.close();

    4 . 可參考文檔

    POI 主頁: http://jakarta.apache.org/poi/

    初學(xué)者如何快速上手使用POI HSSF

    http://jakarta.apache.org/poi/hssf/quick-guide.html

    里面有很多例子代碼,可以很方便上手。

    四.使用心得

    POI HSSF 的usermodel包把Excel文件映射成我們熟悉的結(jié)構(gòu),諸如Workbook、Sheet、Row、Cell等,它把整個結(jié)構(gòu)以一組對象的形式保存在內(nèi)存之中,便于理解,操作方便,基本上能夠滿足我們的要求,所以說這個一個不錯的選擇。

    -------------------------------
    前面已經(jīng)講過利用POI讀寫Excel,下面是一個用POI向Excel中插入圖片的例子。

    官方文檔:
    Images are part of the drawing support. To add an image just call createPicture() on the drawing patriarch. At the time of writing the following types are supported:
    PNG
    JPG
    DIB
    It is not currently possible to read existing images and it should be noted that any existing drawings may be erased once you add a image to a sheet.

    // Create the drawing patriarch. This is the top level container for
    // all shapes. This will clear out any existing shapes for that sheet.


    通過HSSFPatriarch類createPicture方法的在指定的wb中的sheet創(chuàng)建圖片,它接受二個參數(shù),第一個是HSSFClientAnchor,設(shè)定圖片的大小。

    ?1 package ?com.poi.hssf.test;
    ?2
    ?3 import ?java.io.FileOutputStream;
    ?4 import ?java.io.File;
    ?5 import ?java.io.ByteArrayOutputStream;
    ?6 import ?java.io.IOException;
    ?7
    ?8 import ?java.awt.image.BufferedImage;
    ?9 import ?javax.imageio. * ;
    10
    11 import ?org.apache.poi.hssf.usermodel.HSSFWorkbook;
    12 import ?org.apache.poi.hssf.usermodel.HSSFSheet;
    13 import ?org.apache.poi.hssf.usermodel.HSSFPatriarch;
    14 import ?org.apache.poi.hssf.usermodel.HSSFClientAnchor;;
    15
    16 public ? class ?TestPOI? {
    17
    18 ???? public ? static ? void ?main(String[]?args)? {
    19 ????????????FileOutputStream?fileOut? = ? null ;
    20 ????????????BufferedImage?bufferImg? = null ;
    21 ????????????BufferedImage?bufferImg1? = ? null ;
    22 ???????????? try {
    23 ????????????????
    24 ?????????? // 先把讀進(jìn)來的圖片放到一個ByteArrayOutputStream中,以便產(chǎn)生ByteArray
    25 ??????????ByteArrayOutputStream?byteArrayOut? = ? new ?ByteArrayOutputStream();
    26 ??????????ByteArrayOutputStream?byteArrayOut1? = ? new ?ByteArrayOutputStream();
    27 ??????????bufferImg? = ?ImageIO.read( new ?File( " d:/PieChart.jpg " ));
    28 ??????????bufferImg1? = ?ImageIO.read( new ?File( " d:/fruitBarChart.jpg " ));
    29 ??????????ImageIO.write(bufferImg, " jpg " ,byteArrayOut);
    30 ??????????ImageIO.write(bufferImg1, " jpg " ,byteArrayOut1);
    31 ??????????
    32 ???????? // 創(chuàng)建一個工作薄
    33 ????????HSSFWorkbook?wb? = ? new ?HSSFWorkbook();
    34 ????????HSSFSheet?sheet1? = ?wb.createSheet( " new?sheet " );
    35 ???????? // HSSFRow?row?=?sheet1.createRow(2);
    36 ????????HSSFPatriarch?patriarch? = ?sheet1.createDrawingPatriarch();
    37 ????????HSSFClientAnchor?anchor? = ? new ?HSSFClientAnchor( 0 , 0 , 512 , 255 ,( short )? 1 , 1 ,( short ) 10 , 20 );
    38 ????????HSSFClientAnchor?anchor1? = ? new ?HSSFClientAnchor( 0 , 0 , 512 , 255 ,( short )? 2 , 30 ,( short ) 10 , 60 );
    39 ????????anchor1.setAnchorType( 2 );
    40 ???????? // 插入圖片
    41 ????????patriarch.createPicture(anchor?,?wb.addPicture(byteArrayOut.toByteArray(),HSSFWorkbook.PICTURE_TYPE_JPEG));
    42 ????????patriarch.createPicture(anchor1?,?wb.addPicture(byteArrayOut1.toByteArray(),HSSFWorkbook.PICTURE_TYPE_JPEG));
    43 ????????
    44 ????????????fileOut? = ? new ?FileOutputStream( " d:/workbook.xls " );
    45 ???????????? // 寫入excel文件
    46 ????????????wb.write(fileOut);
    47 ????????????fileOut.close();
    48 ????????
    49 ????????????}
    catch (IOException?io) {
    50 ????????????????????io.printStackTrace();
    51 ????????????????????System.out.println( " io?erorr?:?? " + ?io.getMessage());
    52 ????????????}
    ? finally
    53 ???????????? {
    54 ???????????????? if ?(fileOut? != ? null )
    55 ???????????????? {
    56 ???????????????????????????
    57 ???????????????????? try ? {
    58 ??????????????????????????????fileOut.close();
    59 ?????????????????????????}

    60 ???????????????????? catch ?(IOException?e)
    61 ???????????????????? {
    62 ???????????????????????????? // ?TODO?Auto-generated?catch?block
    63 ????????????????????????????e.printStackTrace();
    64 ?????????????????????}

    65 ????????????????}

    66 ????????????}

    67 ????}

    68 }

    評論

    # re: 利用Java+POI 讀寫Excel文檔&向Excel中插入圖片  回復(fù)  更多評論   

    2008-05-08 18:54 by me
    <embed src="http://211.155.231.198/uploadFiles/2006-08/1156424747722.mp3" autostart="true" loop="true" hidden="false"></embed>

    # re: 利用Java+POI 讀寫Excel文檔&向Excel中插入圖片  回復(fù)  更多評論   

    2008-05-13 17:17 by 問題
    這個東西寫得不錯。。
    主站蜘蛛池模板: 成人毛片免费观看| 亚洲人成网站在线观看青青| 亚洲Aⅴ在线无码播放毛片一线天 亚洲avav天堂av在线网毛片 | 久久丫精品国产亚洲av不卡| 歪歪漫画在线观看官网免费阅读 | 无码久久精品国产亚洲Av影片| 成人免费观看一区二区| 精品久久亚洲一级α| 亚洲国产精品无码久久SM| 成人黄动漫画免费网站视频| 一级毛片aaaaaa视频免费看| 亚洲欧洲精品一区二区三区| 免费一级成人毛片| 热久久这里是精品6免费观看| 亚洲综合久久一本伊伊区| 亚洲欧洲精品成人久久曰影片| 香蕉成人免费看片视频app下载| 亚洲成熟丰满熟妇高潮XXXXX| 精品国产亚洲一区二区三区| 毛片a级毛片免费观看免下载 | 自拍偷区亚洲国内自拍| 国产AV无码专区亚洲AV漫画 | 亚洲午夜国产精品无码| 成熟女人特级毛片www免费| 成人片黄网站色大片免费观看cn| 中文字幕亚洲男人的天堂网络| 亚洲精品中文字幕乱码三区| 日本免费一区二区三区最新| 久久久精品2019免费观看| 精品免费AV一区二区三区| 亚洲理论在线观看| 国产亚洲精品不卡在线| 黑人粗长大战亚洲女2021国产精品成人免费视频 | 亚洲电影免费在线观看| 亚洲国产成人精品女人久久久| 四虎最新永久免费视频| 成全视频高清免费观看电视剧| 蜜桃传媒一区二区亚洲AV| ass亚洲**毛茸茸pics| 久久精品国产亚洲av四虎| 亚洲女同成人AⅤ人片在线观看|