<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)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 日本精品人妻无码免费大全| 久久精品国产亚洲一区二区| 7x7x7x免费在线观看| 免费看美女午夜大片| 亚洲色精品三区二区一区| 亚洲天堂男人天堂| 亚洲日韩国产精品第一页一区| 日韩精品视频免费网址| 美女裸身网站免费看免费网站| 免费国产污网站在线观看| 一区二区免费在线观看| 亚洲AV女人18毛片水真多| 亚洲中文字幕无码一去台湾| 亚洲影院在线观看| 亚洲国产精品久久久久网站 | 亚洲国产一区国产亚洲| 国产亚洲老熟女视频| 亚洲人成无码www久久久| 国产成人免费福利网站| 精品国产免费观看一区| 好爽…又高潮了毛片免费看 | 久久亚洲精品中文字幕| 亚洲大片在线观看| 亚洲中文字幕无码中文字在线| 亚洲人成人无码网www国产| 国产一级大片免费看| 国产特级淫片免费看| 啦啦啦www免费视频| 免费无码黄网站在线观看| 黄网址在线永久免费观看 | 91亚洲精品麻豆| 亚洲另类春色校园小说| 亚洲冬月枫中文字幕在线看| 亚洲网址在线观看| 亚洲一级免费毛片| 亚洲人成色99999在线观看| 亚洲色无码专区一区| 色五月五月丁香亚洲综合网| 男女超爽视频免费播放| 国产成人无码免费网站| 丝瓜app免费下载网址进入ios|