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

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

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

    posts - 73,  comments - 55,  trackbacks - 0

    一.POI簡介

    Jakarta POI apache的子項目,目標是處理ole2對象。它提供了一組操縱Windows文檔的Java API

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

    二.HSSF概況

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

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

    三.開始編碼

    1 準備工作

    要求:JDK 1.4+POI開發包

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

    2 EXCEL 結構

    HSSFWorkbook excell 文檔對象介紹
    HSSFSheet excell
    的表單
    HSSFRow excell
    的行
    HSSFCell excell
    的格子單元
    HSSFFont excell
    字體
    HSSFName
    名稱
    HSSFDataFormat
    日期格式
    poi1.7中才有以下2項:
    HSSFHeader sheet

    HSSFFooter sheet

    和這個樣式
    HSSFCellStyle cell
    樣式
    輔助操作包括
    HSSFDateUtil
    日期
    HSSFPrintSetup
    打印
    HSSFErrorConstants
    錯誤信息表

    3 .具體用法實例 (采用 usermodel

    如何讀Excel

    讀取Excel文件時,首先生成一個POIFSFileSystem對象,由POIFSFileSystem對象構造一個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/

    初學者如何快速上手使用POI HSSF

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

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

    5、中文亂碼問題

    ?//把List expItems,寫到EXCEL文件中
    ??FileOutputStream fileOut = new FileOutputStream(filePath);
    ??HSSFWorkbook wb = new HSSFWorkbook();// HSSFWorkbook
    ??HSSFSheet sheet = wb.createSheet();//?
    ??wb.setSheetName(0,“實驗項目列表--中文測試“,HSSFWorkbook.ENCODING_UTF_16);
    ??HSSFRow row = sheet.createRow((short) 0);
    ??HSSFCell cell;
    ??Iterator iter = expItems.iterator();
    ??int i = 0;
    ??while (iter.hasNext()) {
    ???cell = row.createCell((short) i);
    ???cell.setEncoding(HSSFCell.ENCODING_UTF_16);
    ???cell.setCellValue(iter.next().toString());
    ???i++;
    ??}
    ??wb.write(fileOut);
    ??fileOut.close();
    ?}

    四.使用心得

    POI HSSF usermodel包把Excel文件映射成我們熟悉的結構,諸如WorkbookSheetRowCell等,它把整個結構以一組對象的形式保存在內存之中,便于理解,操作方便,基本上能夠滿足我們的要求,所以說這個一個不錯的選擇。
    -------------------------------
    前面已經講過利用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創建圖片,它接受二個參數,第一個是HSSFClientAnchor,設定圖片的大小。

    package com.poi.hssf.test;

    import java.io.FileOutputStream;
    import java.io.File;
    import java.io.ByteArrayOutputStream;
    import java.io.IOException;

    import java.awt.image.BufferedImage;
    import javax.imageio.*;

    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    import org.apache.poi.hssf.usermodel.HSSFSheet;
    import org.apache.poi.hssf.usermodel.HSSFPatriarch;
    import org.apache.poi.hssf.usermodel.HSSFClientAnchor;;

    public class TestPOI {

    ??? public static void main(String[] args) {
    ??????????? FileOutputStream fileOut = null;
    ??????????? BufferedImage bufferImg =null;
    ??????????? BufferedImage bufferImg1 = null;
    ??????????? try{
    ?????????? ??? ?
    ????????? //先把讀進來的圖片放到一個ByteArrayOutputStream中,以便產生ByteArray
    ????????? ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();
    ????????? ByteArrayOutputStream byteArrayOut1 = new ByteArrayOutputStream();
    ????????? bufferImg = ImageIO.read(new File("d:/PieChart.jpg"));
    ????????? bufferImg1 = ImageIO.read(new File("d:/fruitBarChart.jpg"));
    ????????? ImageIO.write(bufferImg,"jpg",byteArrayOut);
    ????????? ImageIO.write(bufferImg1,"jpg",byteArrayOut1);
    ???????? ?
    ??????? //創建一個工作薄
    ?? ??? ?HSSFWorkbook wb = new HSSFWorkbook();
    ?? ??? ?HSSFSheet sheet1 = wb.createSheet("new sheet");
    ?? ??? ?//HSSFRow row = sheet1.createRow(2);
    ?? ??? ?HSSFPatriarch patriarch = sheet1.createDrawingPatriarch();
    ?? ??? ?HSSFClientAnchor anchor = new HSSFClientAnchor(0,0,512,255,(short) 1,1,(short)10,20);
    ?? ??? ?HSSFClientAnchor anchor1 = new HSSFClientAnchor(0,0,512,255,(short) 2,30,(short)10,60);
    ?? ??? ?anchor1.setAnchorType(2);
    ?? ??? ?//插入圖片
    ?? ??? ?patriarch.createPicture(anchor , wb.addPicture(byteArrayOut.toByteArray(),HSSFWorkbook.PICTURE_TYPE_JPEG));
    ?? ??? ?patriarch.createPicture(anchor1 , wb.addPicture(byteArrayOut1.toByteArray(),HSSFWorkbook.PICTURE_TYPE_JPEG));
    ?? ??? ?
    ?? ??? ??? ?fileOut = new FileOutputStream("d:/workbook.xls");
    ?? ??? ??? ?//寫入excel文件
    ?? ??? ??? ?wb.write(fileOut);
    ?? ??? ??? ?fileOut.close();
    ?? ??? ?
    ?? ??? ???? }catch(IOException io){
    ?? ??? ???????????? io.printStackTrace();
    ?? ??? ???????????? System.out.println("io erorr :? "+ io.getMessage());
    ?? ??? ???? } finally
    ?? ??? ???? {
    ?? ??? ??? ??? ?if (fileOut != null)
    ?? ??? ??? ??? ?{
    ?? ??? ?????????????????? ?
    ?? ??? ??? ??? ??? ?try {
    ?? ??? ?????????????????????? fileOut.close();
    ?? ??? ????????????????? }
    ?? ??? ??? ??? ??? ?catch (IOException e)
    ?? ??? ??? ??? ??? ?{
    ??????????????????????????? // TODO Auto-generated catch block
    ??????????????????????????? e.printStackTrace();
    ?? ??? ????????????? }
    ?? ??? ??? ??? ?}
    ?? ??? ???? }
    ??? }
    }

    posted on 2006-08-16 13:52 保爾任 閱讀(14721) 評論(0)  編輯  收藏 所屬分類: open source

    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    常用鏈接

    留言簿(4)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 免费萌白酱国产一区二区三区| 国产一级做a爱免费视频| 久久免费观看国产精品| 97av免费视频| 成人黄动漫画免费网站视频 | 亚洲第一se情网站| 九九全国免费视频| 无码成A毛片免费| 亚洲综合国产精品第一页| 亚洲精品成人av在线| 亚洲午夜成激人情在线影院| 精品无码专区亚洲| 亚洲AV成人潮喷综合网| 亚洲精品**中文毛片| 一级特黄录像免费播放中文版| jlzzjlzz亚洲乱熟在线播放| a级大片免费观看| 在线免费一区二区| 四虎影视在线永久免费看黄| 一区二区三区免费精品视频| 亚洲人精品午夜射精日韩 | 亚洲综合一区国产精品| 亚洲色偷偷综合亚洲AV伊人蜜桃| 成人永久免费福利视频网站| 亚洲色图视频在线观看| 亚洲国产人成在线观看| 情侣视频精品免费的国产| 成人免费网站久久久| 成人最新午夜免费视频| 久久国产乱子伦精品免费不卡| 亚洲日韩小电影在线观看| 6080午夜一级毛片免费看6080夜福利 | 免费大黄网站在线观看| 国产成人精品日本亚洲专区6| 国产精品福利片免费看| 国产在线播放免费| 国产成人亚洲午夜电影| 成年女人毛片免费播放人 | 99re免费在线视频| 亚洲成AV人片一区二区| 男女一边摸一边做爽的免费视频|