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

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

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

    隨筆 - 40, 文章 - 0, 評(píng)論 - 20, 引用 - 0
    數(shù)據(jù)加載中……

    Java Excel 使用攻略

     現(xiàn)在正在做的項(xiàng)目中涉及大量的Excel文件導(dǎo)出導(dǎo)入操作,都是使用Java Excel來(lái)操作。

    Java Excel是一開(kāi)放源碼項(xiàng)目,通過(guò)它Java開(kāi)發(fā)人員可以讀取Excel文件的內(nèi)容、創(chuàng)建新的Excel文件、更新已經(jīng)存在的Excel文件。下面我寫(xiě)了一個(gè)簡(jiǎn)單的例子,展示基本的讀取,新建,更新(包括常見(jiàn)格式的設(shè)置:字體,顏色,背景,合并單元格),拷貝操作,有這些其實(shí)已經(jīng)基本足夠應(yīng)付大部分問(wèn)題了。下面是例的源代碼:

    import java.io.*;
    import java.util.Date;

    import jxl.*;
    import jxl.format.Colour;
    import jxl.format.UnderlineStyle;
    import jxl.read.biff.BiffException;
    import jxl.write.*;
    import jxl.format.UnderlineStyle;
    import jxl.format.CellFormat;;

    public class OperateExcel {
     
     /**
      * Read data from a excel file
      */
     public static void  readExcel(String excelFileName){
      Workbook  rwb = null;  
      try{
       InputStream stream = new FileInputStream(excelFileName);
       rwb = Workbook.getWorkbook(stream);
       Sheet  sheet = rwb.getSheet(0);
       Cell   cell  = null;
       int columns = sheet.getColumns();
       int rows    = sheet.getRows();
       for( int i=0 ; i< rows ; i++ )
        for( int j=0 ; j< columns ; j++){
         //attention: The first parameter is column,the second parameter is row.  
         cell = sheet.getCell(j,i);    
         String str00 = cell.getContents();
         if( cell.getType() == CellType.LABEL )
           str00 += " LAEBL";
         else if( cell.getType() == CellType.NUMBER)
           str00 += " number";
         else if( cell.getType() == CellType.DATE)
           str00 += " date"; 
         System.out.println("00==>"+str00);
        } 
       stream.close();
      }
      catch(IOException e){  
       e.printStackTrace();
      }
      catch(BiffException e){
       e.printStackTrace();
      } 
      finally{  
       rwb.close();
      }
     }
     /**
      * create a new excelFile
      * @param excelFileName create name
      */
     public static void createExcelFile(String excelFileName){
      try{
       WritableWorkbook wwb = Workbook.createWorkbook(new File(excelFileName));
       WritableSheet     ws  = wwb.createSheet("sheet1",0);
       //also,The first parameter is  column,the second parameter is row.
       // add normal label data
       Label label00 = new Label(0,0,"Label00");
       ws.addCell(label00);
       //add font formating data   
       WritableFont  wf = new WritableFont(WritableFont.TIMES, 18, WritableFont.BOLD , true);
       WritableCellFormat wff = new WritableCellFormat(wf);
       Label label10 = new Label(1,0,"Label10",wff);
       ws.addCell(label10);
       //add color font formating data
       WritableFont wf_color = new WritableFont(WritableFont.ARIAL,10,WritableFont.NO_BOLD,false,UnderlineStyle.DOUBLE_ACCOUNTING,Colour.RED);
       WritableCellFormat wff_color = new WritableCellFormat(wf_color);
       wff_color.setBackground(Colour.GRAY_25); //set background coloe to gray  
       Label label20 = new Label(2,0,"Label20",wff_color);   
       ws.addCell(label20);
       
       //合并單元格
       WritableFont wf_merge = new WritableFont(WritableFont.ARIAL,10,WritableFont.NO_BOLD,false,UnderlineStyle.DOUBLE_ACCOUNTING,Colour.GREEN);
       WritableCellFormat wff_merge = new WritableCellFormat(wf_merge);
       wff_merge.setBackground(Colour.BLACK);
       Label label30 = new Label(3,0,"Label30",wff_merge);   
       ws.addCell(label30);
       Label label40 = new Label(4,0,"Label40");
       ws.addCell(label40);
       Label label50 = new Label(5,0,"Label50");
       ws.addCell(label50);
         //合并 (0,3) (4,0)
         //attention : 如果合并后面的列不為空,那么就把后面格的內(nèi)容清空,格式也是按前一個(gè)單元格的格式
       ws.mergeCells(3,0,4,0);
       
       //添加Number格式數(shù)據(jù)
       jxl.write.Number labelN = new jxl.write.Number(0, 1, 3.1415926);
       ws.addCell(labelN);
       
       //添加帶有formatting的Number對(duì)象
       jxl.write.NumberFormat nf = new jxl.write.NumberFormat("#.##");
       jxl.write.WritableCellFormat wcfN = new jxl.write.WritableCellFormat(nf);
       jxl.write.Number labelNF = new jxl.write.Number(1, 1, 3.1415926, wcfN);
       ws.addCell(labelNF);
       
       //添加Boolean對(duì)象
       jxl.write.Boolean labelBoolean = new jxl.write.Boolean(2,1,false);
       ws.addCell(labelBoolean);
       
       //添加DateTime對(duì)象
       DateTime labelDT = new DateTime(3,1,new Date());
       ws.addCell(labelDT);
       
       //添加帶有格式的DataTime數(shù)據(jù)
       DateFormat dtf = new DateFormat("yyyy-MM-dd hh:mm:ss");
       WritableCellFormat wcfDt = new WritableCellFormat(dtf);   
       wcfDt.setBackground(Colour.YELLOW);
       DateTime labelDT_format =  new DateTime(4,1,new java.util.Date(),wcfDt);
       ws.addCell(labelDT_format);
       ws.mergeCells(4,1,5,1); //比較長(zhǎng),用兩列來(lái)顯示     
       
       wwb.write();
       wwb.close();
      }
      catch(IOException e){
       e.printStackTrace();
      }
      catch(WriteException e){
       e.printStackTrace();
      }  
     }
     /**
      * 如何更新Excel文件
      * @param fileName
      */
     public static void updateExcel(String fileName){  
      try{
       jxl.Workbook rw = jxl.Workbook.getWorkbook(new File(fileName));
       WritableWorkbook wwb = Workbook.createWorkbook(new File(fileName),rw);
       //這里其實(shí)執(zhí)行的是一次copy操作,把文件先讀到內(nèi)存中,修改后再保存覆蓋原來(lái)的文件來(lái)實(shí)現(xiàn)update操作
       WritableSheet ws  = wwb.getSheet(0);
       WritableCell wc = ws.getWritableCell(0,0);
       if( wc.getType() == CellType.LABEL){
        Label l = (Label)wc;
        l.setString(wc.getContents()+"_new");
       }
       wwb.write();
       wwb.close();
      }
      catch(IOException e){
       e.printStackTrace();
      }
      catch(WriteException e){
       e.printStackTrace();
      } 
      catch(BiffException e){
       e.printStackTrace();
      }
     }
     /**
      * 如何copy Excel文件
      * @param fileName
      */
     public static void copyExcel(String sourFileName,String destFileName){  
      try{
       jxl.Workbook rw = jxl.Workbook.getWorkbook(new File(sourFileName));
       WritableWorkbook wwb = Workbook.createWorkbook(new File(destFileName),rw);
       wwb.write();
       wwb.close();
      }
      catch(IOException e){
       e.printStackTrace();
      }
      catch(WriteException e){
       e.printStackTrace();
      } 
      catch(BiffException e){
       e.printStackTrace();
      }
     }
     
     public static void main(String [] argv){
      //OperateExcel.readExcel("E:\\test.xls");
      //OperateExcel.createExcelFile("E:\\test1.xls");
      //OperateExcel.updateExcel("E:\\test.xls");
      OperateExcel.copyExcel("E:\\test.xls","E:\\moon.xls");
     }

    }


    posted on 2005-12-06 15:06 月亮 閱讀(2201) 評(píng)論(4)  編輯  收藏

    評(píng)論

    # re: Java Excel 使用攻略  回復(fù)  更多評(píng)論   

    有沒(méi)有人對(duì)Java Excel和apache的開(kāi)源項(xiàng)目:POI(http://jakarta.apache.org/poi/index.html)做個(gè)比較呢?
    2005-12-07 09:27 | 文軸

    # re: Java Excel 使用攻略  回復(fù)  更多評(píng)論   

    POI功能更復(fù)雜
    在內(nèi)存占用和效率方面,jxl高出poi很多
    2005-12-09 17:10 | ptrx

    # re: Java Excel 使用攻略  回復(fù)  更多評(píng)論   

    E:\\test1.xls
    這里生成的文件的路徑都是寫(xiě)死了的,怎么樣能動(dòng)態(tài)生成文件的路徑啊?例如我做的是web開(kāi)發(fā),打包后放到不同的路徑后,該文件的位置后自動(dòng)找到啊?能說(shuō)說(shuō)嗎?我找了很久多不知道怎么做,只知道有人用ClassLoader來(lái)做,但我不會(huì)用
    2005-12-30 00:05 | 游客

    # re: Java Excel 使用攻略  回復(fù)  更多評(píng)論   

    舉個(gè)例子,我用的web服務(wù)器是weblogic,我在服務(wù)器的config\excelOutport目錄里面放上了我想要的Excel文件,整個(gè)目錄名為:
    D:\bea\user_projects\domains\mydomainc\myserver\config\excelOutport
    那么我要在servlet中得到這個(gè)路徑,可以這么寫(xiě):
    String filePath = System.getProperty("user.dir");
    filePath += System.getProperty("file.separator");
    filePath += System.getProperty("weblogic.Name");
    filePath += System.getProperty("file.separator");
    filePath += "config";
    filePath += System.getProperty("file.separator");
    filePath += "excelOutport";
    filePath += System.getProperty("file.separator");
    filePath += "test.xls";
    其他的服務(wù)器應(yīng)該也有相似的辦法,你試一下。
    2005-12-31 17:58 | 月亮

    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 精品亚洲成A人在线观看青青| 国产免费久久久久久无码| 免费永久国产在线视频| 亚洲国产免费综合| 亚洲国语精品自产拍在线观看| 免费三级毛片电影片| mm1313亚洲国产精品无码试看| 亚洲无码在线播放| 国产福利视精品永久免费| 男男gay做爽爽的视频免费| 亚洲AV无码专区亚洲AV伊甸园| 免费99精品国产自在现线| 一本岛v免费不卡一二三区| 亚洲网红精品大秀在线观看| 一级毛片直播亚洲| 免费观看激色视频网站bd| 一日本道a高清免费播放| 亚洲avav天堂av在线网爱情| 国产亚洲美女精品久久久| 无码视频免费一区二三区| 精品四虎免费观看国产高清午夜| 亚洲精华国产精华精华液好用 | 成人免费看片又大又黄| 免费无码又爽又刺激高潮软件| 中文字幕亚洲精品无码| 亚洲av午夜成人片精品网站| 亚洲成A人片在线观看中文| 无码国产精品一区二区免费式直播| 一级一级一级毛片免费毛片| 亚洲Av无码国产一区二区| 亚洲视频小说图片| 亚洲国产另类久久久精品黑人| 国产精品成人无码免费| 在线看免费观看AV深夜影院| 免费一区二区无码东京热| 四虎影视久久久免费| 老子影院午夜伦不卡亚洲| 亚洲一卡2卡三卡4卡无卡下载| 在线观看亚洲一区二区| 亚洲AV无码码潮喷在线观看| 久久亚洲国产精品123区|