<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是為了收集資料,認識朋友,學習、提高技術,所以本blog的內容除非聲明,否則一律為轉載!!

    感謝那些公開自己技術成果的高人們!!!

    支持開源,尊重他人的勞動!!

    常用鏈接

    留言簿(3)

    隨筆分類(148)

    隨筆檔案(143)

    收藏夾(2)

    其他

    學習(技術)

    觀察思考(非技術)

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

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

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

    最近和Excel頻繁親密接觸,主要將N個Excel表中的數據拷貝到另外的Excel表中規整為二維結構以便入庫。但是有些表存在合并單元格的情況,甚是惱火,怎么辦哪?好在這N個Excel表結構還比較一致,可以寫程序在指定位置讀取,然后再寫入到新的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中的字符轉為字符串
    wb.close();//關閉工作薄
    is.close();//關閉輸入流


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

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

    <%@ 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);//創建可寫工作薄
    WritableSheet ws = wwb.createSheet("sheet1", 0);//創建可寫工作表
    Label labelCF=new Label(0, 0, "hello");//創建寫入位置和內容
    ws.addCell(labelCF);//將Label寫入sheet中

    Label的構造函數Label(int x, int y,String aString)xy意同讀的時候的xy,aString是寫入的內容.

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

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

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

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

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

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

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

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

    三、讀文件
    //聲明一下,記得后面要關閉哦。。
    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++) {
           //注意,這里的兩個參數,第一個是表示列的,第二才表示行
           cell=sheet.getCell(j, 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");
    }
    //關閉它,否則會有內存泄露
    workbook.close();


    寫:wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
    在Java中向Excel文件寫入內容


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

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

    //剩下的事情,就是用上面的內容和格式創建一些單元格,再加到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);

    //設置列的寬度
    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
    不能用  回復  更多評論
      
    主站蜘蛛池模板: 亚洲国产精品无码中文字| 亚洲国产黄在线观看| 久久精品国产亚洲AV无码娇色 | 一本色道久久综合亚洲精品高清| 亚洲精品久久久久无码AV片软件| 男女啪啪永久免费观看网站| 亚洲爆乳大丰满无码专区| 国产精品免费看香蕉| 四虎影视在线看免费观看| 亚洲人成色7777在线观看不卡 | 最近中文字幕高清免费中文字幕mv| 亚洲国产精品不卡在线电影| 亚洲高清视频免费| 中文字幕亚洲男人的天堂网络| 成人免费视频试看120秒| 国产成人综合亚洲一区| 亚洲性久久久影院| 久久黄色免费网站| 91丁香亚洲综合社区| 国产一级高清免费观看| 国产成人自产拍免费视频| 亚洲国产精品不卡在线电影| 国产日本一线在线观看免费| 亚洲a∨国产av综合av下载| 亚洲精品无码AV中文字幕电影网站| 两个人看的www免费视频中文| 99ri精品国产亚洲| 日韩高清在线免费看| 中文在线免费不卡视频| 亚洲天堂福利视频| 四虎国产精品免费视| 久久综合九色综合97免费下载| 99久久婷婷国产综合亚洲| 亚洲爽爽一区二区三区| 免费A级毛片无码A∨免费| 最新亚洲人成无码网站| 亚洲AV无码不卡在线播放| 免费鲁丝片一级在线观看| 两个人看的www免费视频| 亚洲精品日韩一区二区小说| 亚洲熟妇av一区二区三区|