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

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

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

    隨筆 - 154  文章 - 60  trackbacks - 0
    <2007年10月>
    30123456
    78910111213
    14151617181920
    21222324252627
    28293031123
    45678910

    聲明:

    該blog是為了收集資料,認識朋友,學習、提高技術(shù),所以本blog的內(nèi)容除非聲明,否則一律為轉(zhuǎn)載!!

    感謝那些公開自己技術(shù)成果的高人們?。。?/p> 支持開源,尊重他人的勞動?。?

    常用鏈接

    留言簿(3)

    隨筆分類(148)

    隨筆檔案(143)

    收藏夾(2)

    其他

    學習(技術(shù))

    觀察思考(非技術(shù))

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    同行整理,簡單明了,快速上手!

    =============================正文1============================

    最近和Excel頻繁親密接觸,主要將N個Excel表中的數(shù)據(jù)拷貝到另外的Excel表中規(guī)整為二維結(jié)構(gòu)以便入庫。但是有些表存在合并單元格的情況,甚是惱火,怎么辦哪?好在這N個Excel表結(jié)構(gòu)還比較一致,可以寫程序在指定位置讀取,然后再寫入到新的Excel表中,這樣就OK了。這里面主要用到一個組件JXL.

    jxl的安裝:
    主要就是將jxl的包放在WEB-INF的classes下面(如果下載到的是.jar文件,就放在lib下面).別忘了將jxl包中的common文件夾也放在WEB-INF下面.

    jxl的使用:
    主要的功能就是讀Excel文件和寫Excel文件

    <b>讀:</b>
    讀的時候是這樣的一個思路,先用一個輸入流(InputStream)得到Excel文件,然后用jxl中的Workbook得到工作薄,用Sheet從工作薄中得到工作表,用Cell得到工作表中得某個單元格.
    InputStream->Workbook->Sheet->Cell,就得到了excel文件中的單元格

    代碼:
    <%@ page contentType="text/html; charset=gb2312" %>
    <%@  page  import="java.io.*,jxl.*,jxl.write.*,jxl.write.*,jxl.format.*"  %> 
    String path="c:\\excel.xls";//Excel文件URL
    InputStream is = new FileInputStream(path);//寫入到FileInputStream
    jxl.Workbook wb = Workbook.getWorkbook(is); //得到工作薄     
    jxl.Sheet st = wb.getSheet(0);//得到工作薄中的第一個工作表
    Cell cell=st.getCell(0,0);//得到工作表的第一個單元格,即A1
    String content=cell.getContents();//getContents()將Cell中的字符轉(zhuǎn)為字符串
    wb.close();//關(guān)閉工作薄
    is.close();//關(guān)閉輸入流


    我們可以通過Sheet的getCell(x,y)方法得到任意一個單元格,x,y和excel中的坐標對應.
    例如A1對應(0,0),A2對應(0,1),D3對應(3,2).Excel中坐標從A,1開始,jxl中全部是從0開始.
    還可以通過Sheet的getRows(),getColumns()方法得到行數(shù)列數(shù),并用于循環(huán)控制,輸出一個sheet中的所有內(nèi)容.

    <b>寫:</b>
    往Excel中寫入內(nèi)容主要是用jxl.write包中的類.
    思路是這樣的:
    OutputStream<-WritableWorkbook<-WritableSheet<-Label
    這里面Label代表的是寫入Sheet的Cell位置及內(nèi)容.
    代碼:

    <%@ page contentType="text/html; charset=gb2312" %>
    <%@  page  import="java.io.*,jxl.*,jxl.write.*,jxl.write.*,jxl.format.*"  %>
    OutputStream os=new  FileOutputStream("c:\\test.xls");//輸出的Excel文件URL
    WritableWorkbook wwb = Workbook.createWorkbook(os);//創(chuàng)建可寫工作薄
    WritableSheet ws = wwb.createSheet("sheet1", 0);//創(chuàng)建可寫工作表
    Label labelCF=new Label(0, 0, "hello");//創(chuàng)建寫入位置和內(nèi)容
    ws.addCell(labelCF);//將Label寫入sheet中

    Label的構(gòu)造函數(shù)Label(int x, int y,String aString)xy意同讀的時候的xy,aString是寫入的內(nèi)容.

    WritableFont wf = new WritableFont(WritableFont.TIMES, 12, WritableFont.BOLD, false);//設(shè)置寫入字體
    WritableCellFormat wcfF = new WritableCellFormat(wf);//設(shè)置CellFormat
    Label labelCF=new Label(0, 0, "hello");//創(chuàng)建寫入位置,內(nèi)容和格式

    Label的另一構(gòu)造函數(shù)Label(int c, int r, String cont, CellFormat st)可以對寫入內(nèi)容進行格式化,設(shè)置字體及其它的屬性.

    現(xiàn)在可以寫了
    wwb.write();
    寫完后關(guān)閉
    wwb.close();
    輸出流也關(guān)閉吧
    os.close;

    OK,只要把讀和寫結(jié)合起來,就可以在N個Excel中讀取數(shù)據(jù)寫入你希望的Excel新表中,還是比較方便的.

    =============================正文2============================

    在這里,我使用的是一個叫Java Excel API的東西,類似的還有jakarta的POI,不過感覺那個
    太復雜了點兒。而且jxl對中文的支持相當?shù)暮?,至少我在用的過程中一點問題沒出。

    一、下載地址
    http://www.andykhan.com/jexcelapi/

    二、特性
    可以讀取Excel 95, 97, 2000文件
    可以讀或?qū)慐xcel 97及其以后版本的的公式(不過我發(fā)現(xiàn)好像有bug)
    生成Excel 97格式的電子表格
    支持字體、數(shù)字和日期格式化
    支持單元格的顏色和陰影
    可以編輯現(xiàn)有的文件

    三、讀文件
    //聲明一下,記得后面要關(guān)閉哦。。
    Workbook workbook = null;

    try {
       workbook = Workbook.getWorkbook(new File("d:\\temp\\TestRead.xls"));
    } catch (Exception e) {
       throw new Exception("file to import not found!");
    }

    Sheet sheet = workbook.getSheet(0);
    Cell cell = null;

    int columnCount=3;
    int rowCount=sheet.getRows();
    for (int i = 0; i <rowCount; i++) {
       for (int j = 0; j <columnCount; j++) {
           //注意,這里的兩個參數(shù),第一個是表示列的,第二才表示行
           cell=sheet.getCell(j, i);
           //要根據(jù)單元格的類型分別做處理,否則格式化過的內(nèi)容可能會不正確
           if(cell.getType()==CellType.NUMBER){
               System.out.print(((NumberCell)cell).getvalue());
           }
           else if(cell.getType()==CellType.DATE){
               System.out.print(((DateCell)cell).getDate());
           }
           else{
               System.out.print(cell.getContents());
           }
           
           //System.out.print(cell.getContents());
           System.out.print("\t");
       }
       System.out.print("\n");
    }
    //關(guān)閉它,否則會有內(nèi)存泄露
    workbook.close();


    寫:wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
    在Java中向Excel文件寫入內(nèi)容


    四、導出數(shù)據(jù)到Excel文件中
    下面的例子,設(shè)置了數(shù)字、日期的格式,還有字體,顏色等。

    File tempFile=new File("d:/temp/output.xls");
    WritableWorkbook workbook = Workbook.createWorkbook(tempFile);
    WritableSheet sheet = workbook.createSheet("TestCreateExcel", 0);

    //一些臨時變量,用于寫到excel中
    Label l=null;
    jxl.write.Number n=null;
    jxl.write.DateTime d=null;

    //預定義的一些字體和格式,同一個Excel中最好不要有太多格式
    WritableFont headerFont = new WritableFont(WritableFont.ARIAL, 12, WritableFont.BOLD, false, Underlinestyle.NO_UNDERLINE, jxl.format.Colour.BLUE);
    WritableCellformat headerformat = new WritableCellformat (headerFont);

    WritableFont titleFont = new WritableFont(WritableFont.ARIAL, 10, WritableFont.NO_BOLD, false, Underlinestyle.NO_UNDERLINE, jxl.format.Colour.RED);
    WritableCellformat titleformat = new WritableCellformat (titleFont);

    WritableFont detFont = new WritableFont(WritableFont.ARIAL, 10, WritableFont.NO_BOLD, false, Underlinestyle.NO_UNDERLINE, jxl.format.Colour.BLACK);
    WritableCellformat detformat = new WritableCellformat (detFont);

    Numberformat nf=new Numberformat("0.00000");  //用于Number的格式
    WritableCellformat priceformat = new WritableCellformat (detFont, nf);

    Dateformat df=new Dateformat("yyyy-MM-dd");//用于日期的
    WritableCellformat dateformat = new WritableCellformat (detFont, df);

    //剩下的事情,就是用上面的內(nèi)容和格式創(chuàng)建一些單元格,再加到sheet中
    l=new Label(0, 0, "用于測試的Excel文件", headerformat);
    sheet.addCell(l);

    //add Title
    int column=0;
    l=new Label(column++, 2, "標題", titleformat);
    sheet.addCell(l);
    l=new Label(column++, 2, "日期", titleformat);
    sheet.addCell(l);
    l=new Label(column++, 2, "貨幣", titleformat);
    sheet.addCell(l);
    l=new Label(column++, 2, "價格", titleformat);
    sheet.addCell(l);

    //add detail
    int i=0;
    column=0;
    l=new Label(column++, i+3, "標題 "+i, detformat);
    sheet.addCell(l);
    d=new DateTime(column++, i+3, new java.util.Date(), dateformat);
    sheet.addCell(d);
    l=new Label(column++, i+3, "CNY", detformat);
    sheet.addCell(l);
    n=new jxl.write.Number(column++, i+3, 5.678, priceformat);
    sheet.addCell(n);

    i++;
    column=0;
    l=new Label(column++, i+3, "標題 "+i, detformat);
    sheet.addCell(l);
    d=new DateTime(column++, i+3, new java.util.Date(), dateformat);
    sheet.addCell(d);
    l=new Label(column++, i+3, "SGD", detformat);
    sheet.addCell(l);
    n=new jxl.write.Number(column++, i+3, 98832, priceformat);
    sheet.addCell(n);

    //設(shè)置列的寬度
    column=0;
    sheet.setColumnView(column++, 20);
    sheet.setColumnView(column++, 20);
    sheet.setColumnView(column++, 10);
    sheet.setColumnView(column++, 20);

    workbook.write();
    workbook.close();

    posted on 2007-10-26 09:08 lk 閱讀(2819) 評論(1)  編輯  收藏 所屬分類: j2se

    FeedBack:
    # re: 使用jxl讀和寫Excel文件(速成) 2008-10-21 15:31 dfg
    不能用  回復  更多評論
      
    主站蜘蛛池模板: 亚洲高清无码综合性爱视频| 久久精品亚洲中文字幕无码网站| 一级毛片免费在线| 久久精品亚洲一区二区| 成人片黄网站色大片免费| 高潮内射免费看片| 亚洲嫩草影院久久精品| 成人毛片免费观看| 在线看片免费人成视频播| 亚洲1234区乱码| 在线日韩日本国产亚洲| 真人做A免费观看| 国产精品午夜免费观看网站 | www.亚洲成在线| 亚洲最大激情中文字幕| 无码国产精品久久一区免费| 亚洲免费日韩无码系列| 亚洲最大的黄色网| 亚洲AV无码一区二区三区系列| 免费观看的a级毛片的网站| 久久青草免费91线频观看不卡 | 久久久久国产成人精品亚洲午夜| 97视频免费在线| 你懂的网址免费国产| 日韩在线视精品在亚洲| 亚洲H在线播放在线观看H| 亚洲精品国偷自产在线| 国产一区二区三区在线免费观看| 中文字幕视频免费| 精品无码一级毛片免费视频观看 | 67pao强力打造67194在线午夜亚洲| 亚洲成a人无码av波多野按摩| 99久久免费国产精品特黄| 久久久精品免费国产四虎| 日本高清免费中文在线看| 亚洲自国产拍揄拍| 亚洲欧洲综合在线| 久久久久亚洲精品影视| 中文字幕亚洲无线码| 亚洲一区日韩高清中文字幕亚洲| 日韩一区二区在线免费观看|