table

          利用java操作Excel文件

          很久以來都想研究一下利用java操作Excel的方法,今天沒事,就稍微了解了一下,特總結(jié)一下。利用java操作Excel,有個(gè)開源的東東-jxl.jar,可以到http://sourceforge.net/project/showfiles.php?group_id=79926下載。

          一.讀取Excel文件內(nèi)容

          java 代碼
          1. /**讀取Excel文件的內(nèi)容  
          2.  * @param file  待讀取的文件  
          3.  * @return  
          4.  */  
          5. public static String readExcel(File file){   
          6.     StringBuffer sb = new StringBuffer();   
          7.        
          8.     Workbook wb = null;   
          9.     try {   
          10.         //構(gòu)造Workbook(工作?。ο?  
          11.         wb=Workbook.getWorkbook(file);   
          12.     } catch (BiffException e) {   
          13.         e.printStackTrace();   
          14.     } catch (IOException e) {   
          15.         e.printStackTrace();   
          16.     }   
          17.        
          18.     if(wb==null)   
          19.         return null;   
          20.        
          21.     //獲得了Workbook對象之后,就可以通過它得到Sheet(工作表)對象了   
          22.     Sheet[] sheet = wb.getSheets();   
          23.        
          24.     if(sheet!=null&&sheet.length>0){   
          25.         //對每個(gè)工作表進(jìn)行循環(huán)   
          26.         for(int i=0;i
          27.             //得到當(dāng)前工作表的行數(shù)   
          28.             int rowNum = sheet[i].getRows();   
          29.             for(int j=0;j
          30.                 //得到當(dāng)前行的所有單元格   
          31.                 Cell[] cells = sheet[i].getRow(j);   
          32.                 if(cells!=null&&cells.length>0){   
          33.                     //對每個(gè)單元格進(jìn)行循環(huán)   
          34.                     for(int k=0;k
          35.                         //讀取當(dāng)前單元格的值   
          36.                         String cellValue = cells[k].getContents();   
          37.                         sb.append(cellValue+"\t");   
          38.                     }   
          39.                 }   
          40.                 sb.append("\r\n");   
          41.             }   
          42.             sb.append("\r\n");   
          43.         }   
          44.     }   
          45.     //最后關(guān)閉資源,釋放內(nèi)存   
          46.     wb.close();   
          47.     return sb.toString();   
          48. }  

          二.寫入Excel文件

          這里有很多格式了,比如文本內(nèi)容加粗,加上某些顏色等,可以參考jxl的api,同時(shí)還推薦一篇不錯(cuò)的文章:http://www.ibm.com/developerworks/cn/java/l-javaExcel/?ca=j-t10

          java 代碼
          1. /**生成一個(gè)Excel文件  
          2.      * @param fileName  要生成的Excel文件名  
          3.      */  
          4.     public static void writeExcel(String fileName){   
          5.         WritableWorkbook wwb = null;   
          6.         try {   
          7.             //首先要使用Workbook類的工廠方法創(chuàng)建一個(gè)可寫入的工作薄(Workbook)對象   
          8.             wwb = Workbook.createWorkbook(new File(fileName));   
          9.         } catch (IOException e) {   
          10.             e.printStackTrace();   
          11.         }   
          12.         if(wwb!=null){   
          13.             //創(chuàng)建一個(gè)可寫入的工作表   
          14.             //Workbook的createSheet方法有兩個(gè)參數(shù),第一個(gè)是工作表的名稱,第二個(gè)是工作表在工作薄中的位置   
          15.             WritableSheet ws = wwb.createSheet("sheet1"0);   
          16.                
          17.             //下面開始添加單元格   
          18.             for(int i=0;i<10;i++){   
          19.                 for(int j=0;j<5;j++){   
          20.                     //這里需要注意的是,在Excel中,第一個(gè)參數(shù)表示列,第二個(gè)表示行   
          21.                     Label labelC = new Label(j, i, "這是第"+(i+1)+"行,第"+(j+1)+"列");   
          22.                     try {   
          23.                         //將生成的單元格添加到工作表中   
          24.                         ws.addCell(labelC);   
          25.                     } catch (RowsExceededException e) {   
          26.                         e.printStackTrace();   
          27.                     } catch (WriteException e) {   
          28.                         e.printStackTrace();   
          29.                     }   
          30.   
          31.                 }   
          32.             }   
          33.   
          34.             try {   
          35.                 //從內(nèi)存中寫入文件中   
          36.                 wwb.write();   
          37.                 //關(guān)閉資源,釋放內(nèi)存   
          38.                 wwb.close();   
          39.             } catch (IOException e) {   
          40.                 e.printStackTrace();   
          41.             } catch (WriteException e) {   
          42.                 e.printStackTrace();   
          43.             }   
          44.         }   
          45.     }   

          三.在一個(gè)Excel文件中查找是否包含某一個(gè)關(guān)鍵字

          java 代碼
          1. /**搜索某一個(gè)文件中是否包含某個(gè)關(guān)鍵字  
          2.      * @param file  待搜索的文件  
          3.      * @param keyWord  要搜索的關(guān)鍵字  
          4.      * @return  
          5.      */  
          6.     public static boolean searchKeyWord(File file,String keyWord){   
          7.         boolean res = false;   
          8.            
          9.         Workbook wb = null;   
          10.         try {   
          11.             //構(gòu)造Workbook(工作?。ο?  
          12.             wb=Workbook.getWorkbook(file);   
          13.         } catch (BiffException e) {   
          14.             return res;   
          15.         } catch (IOException e) {   
          16.             return res;   
          17.         }   
          18.            
          19.         if(wb==null)   
          20.             return res;   
          21.            
          22.         //獲得了Workbook對象之后,就可以通過它得到Sheet(工作表)對象了   
          23.         Sheet[] sheet = wb.getSheets();   
          24.            
          25.         boolean breakSheet = false;   
          26.            
          27.         if(sheet!=null&&sheet.length>0){   
          28.             //對每個(gè)工作表進(jìn)行循環(huán)   
          29.             for(int i=0;i
          30.                 if(breakSheet)   
          31.                     break;   
          32.                    
          33.                 //得到當(dāng)前工作表的行數(shù)   
          34.                 int rowNum = sheet[i].getRows();   
          35.                    
          36.                 boolean breakRow = false;   
          37.                    
          38.                 for(int j=0;j
          39.                     if(breakRow)   
          40.                         break;   
          41.                     //得到當(dāng)前行的所有單元格   
          42.                     Cell[] cells = sheet[i].getRow(j);   
          43.                     if(cells!=null&&cells.length>0){   
          44.                         boolean breakCell = false;   
          45.                         //對每個(gè)單元格進(jìn)行循環(huán)   
          46.                         for(int k=0;k
          47.                             if(breakCell)   
          48.                                 break;   
          49.                             //讀取當(dāng)前單元格的值   
          50.                             String cellValue = cells[k].getContents();   
          51.                             if(cellValue==null)   
          52.                                 continue;   
          53.                             if(cellValue.contains(keyWord)){   
          54.                                 res = true;   
          55.                                 breakCell = true;   
          56.                                 breakRow = true;   
          57.                                 breakSheet = true;   
          58.                             }   
          59.                         }   
          60.                     }   
          61.                 }   
          62.             }   
          63.         }   
          64.         //最后關(guān)閉資源,釋放內(nèi)存   
          65.         wb.close();   
          66.            
          67.         return res;   
          68.     }  

          四.往Excel中插入圖片圖標(biāo)

          插入圖片的實(shí)現(xiàn)很容易,參看以下代碼:

          java 代碼
          1. /**往Excel中插入圖片  
          2.  * @param dataSheet  待插入的工作表  
          3.  * @param col 圖片從該列開始  
          4.  * @param row 圖片從該行開始  
          5.  * @param width 圖片所占的列數(shù)  
          6.  * @param height 圖片所占的行數(shù)  
          7.  * @param imgFile 要插入的圖片文件  
          8.  */  
          9. public static void insertImg(WritableSheet dataSheet, int col, int row, int width,   
          10.         int height, File imgFile){   
          11.     WritableImage img = new WritableImage(col, row, width, height, imgFile);   
          12.     dataSheet.addImage(img);   
          13. }   

          以上代碼的注釋已經(jīng)很清楚了,大概也就不用再解釋了,我們可以用如下程序驗(yàn)證:

          java 代碼
          1.     try {   
          2.         //創(chuàng)建一個(gè)工作薄   
          3. WritableWorkbook workbook = Workbook.createWorkbook(new File("D:/test1.xls"));   
          4. //待插入的工作表   
          5. WritableSheet imgSheet = workbook.createSheet("Images",0);   
          6. //要插入的圖片文件   
          7. File imgFile = new File("D:/1.png");   
          8. //圖片插入到第二行第一個(gè)單元格,長寬各占六個(gè)單元格   
          9. insertImg(imgSheet,0,1,6,6,imgFile);   
          10. workbook.write();   
          11. workbook.close();   
          12.  catch (IOException e) {   
          13. e.printStackTrace();   
          14.  catch (WriteException e) {   
          15. e.printStackTrace();   

           但是jxl只支持png格式的圖片,jpg格式和gif格式都不支持

          五.插入頁眉頁腳

          一般的頁眉頁腳都分為三個(gè)部分,左,中,右三部分,利用如下代碼可實(shí)現(xiàn)插入頁眉頁腳

          java 代碼
          1. /**向Excel中加入頁眉頁腳  
          2.  * @param dataSheet 待加入頁眉的工作表  
          3.  * @param left  
          4.  * @param center  
          5.  * @param right  
          6.  */  
          7. public static void setHeader(WritableSheet dataSheet,String left,String center,String right){   
          8.     HeaderFooter hf = new HeaderFooter();   
          9.     hf.getLeft().append(left);   
          10.     hf.getCentre().append(center);   
          11.     hf.getRight().append(right);   
          12.     //加入頁眉   
          13.     dataSheet.getSettings().setHeader(hf);   
          14.     //加入頁腳   
          15.     //dataSheet.getSettings().setFooter(hf);   
          16. }  

          我們可以用如下代碼測試該方法:

          java 代碼
          1.     try {   
          2.         //創(chuàng)建一個(gè)工作薄   
          3.     WritableWorkbook workbook = Workbook.createWorkbook(new File("D:/test1.xls"));   
          4.     //待插入的工作表   
          5.     WritableSheet dataSheet = workbook.createSheet("加入頁眉",0);   
          6.     ExcelUtils.setHeader(dataSheet, "chb""2007-03-06""第1頁,共3頁");   
          7.     workbook.write();   
          8.     workbook.close();   
          9. catch (IOException e) {   
          10.     e.printStackTrace();   
          11. catch (WriteException e) {   
          12.     e.printStackTrace();   
          13. }   
          14.   }  

          posted on 2009-05-12 14:11 小卓 閱讀(153) 評論(0)  編輯  收藏 所屬分類: j2se

          主站蜘蛛池模板: 鄂托克旗| 正阳县| 龙海市| 博罗县| 阿合奇县| 汾阳市| 布拖县| 桓台县| 灵武市| 南澳县| 沂水县| 台中县| 伊川县| 屯门区| 上虞市| 会东县| 德令哈市| 新绛县| 鄂州市| 静宁县| 武山县| 平原县| 嵊泗县| 调兵山市| 鲜城| 务川| 湟源县| 定日县| 攀枝花市| 黎平县| 福清市| 故城县| 陇南市| 莲花县| 疏附县| 赣州市| 湘阴县| 和林格尔县| 德惠市| 梓潼县| 宜兰县|