利用java操作Excel,有个开源的东东-jxl.jar,可以到http://sourceforge.net/project/showfiles.php?group_id=79926下载。

一.读取Excel文件内容

java 代码

  1.   

  2. public static String readExcel(File file){   

  3.     StringBuffer sb = new StringBuffer();   

  4.        

  5.     Workbook wb = null;   

  6.     try {   

  7.         //构造Workbook(工作薄)对象   

  8.         wb=Workbook.getWorkbook(file);   

  9.     } catch (BiffException e) {   

  10.         e.printStackTrace();   

  11.     } catch (IOException e) {   

  12.         e.printStackTrace();   

  13.     }   

  14.        

  15.     if(wb==null)   

  16.         return null;   

  17.        

  18.     //获得了Workbook对象之后,就可以通过它得到Sheet(工作表)对象了   

  19.     Sheet[] sheet = wb.getSheets();   

  20.        

  21.     if(sheet!=null&&sheet.length>0){   

  22.         //对每个工作表进行循环   

  23.         for(int i=0;i

  24.             //得到当前工作表的行数   

  25.             int rowNum = sheet[i].getRows();   

  26.             for(int j=0;j

  27.                 //得到当前行的所有单元格   

  28.                 Cell[] cells = sheet[i].getRow(j);   

  29.                 if(cells!=null&&cells.length>0){   

  30.                     //对每个单元格进行循环   

  31.                     for(int k=0;k

  32.                         //读取当前单元格的值   

  33.                         String cellValue = cells[k].getContents();   

  34.                         sb.append(cellValue+"\t");   

  35.                     }   

  36.                 }   

  37.                 sb.append("\r\n");   

  38.             }   

  39.             sb.append("\r\n");   

  40.         }   

  41.     }   

  42.     //最后关闭资源,释放内存   

  43.     wb.close();   

  44.     return sb.toString();   

  45. }  

二.写入Excel文件

这里有很多格式了,比如文本内容加粗,加上某些颜色等,可以参考jxl的api,同时还推荐一篇不错的文章:http://www.ibm.com/developerworks/cn/java/l-javaExcel/?ca=j-t10

java 代码

  1.   

  2.     public static void writeExcel(String fileName){   

  3.         WritableWorkbook wwb = null;   

  4.         try {   

  5.             //首先要使用Workbook类的工厂方法创建一个可写入的工作薄(Workbook)对象   

  6.             wwb = Workbook.createWorkbook(new File(fileName));   

  7.         } catch (IOException e) {   

  8.             e.printStackTrace();   

  9.         }   

  10.         if(wwb!=null){   

  11.             //创建一个可写入的工作表   

  12.             //Workbook的createSheet方法有两个参数,第一个是工作表的名称,第二个是工作表在工作薄中的位置   

  13.             WritableSheet ws = wwb.createSheet("sheet1"0);   

  14.                

  15.             //下面开始添加单元格   

  16.             for(int i=0;i<10;i++){   

  17.                 for(int j=0;j<5;j++){   

  18.                     //这里需要注意的是,在Excel中,第一个参数表示列,第二个表示行   

  19.                     Label labelC = new Label(j, i, "这是第"+(i+1)+"行,第"+(j+1)+"列");   

  20.                     try {   

  21.                         //将生成的单元格添加到工作表中   

  22.                         ws.addCell(labelC);   

  23.                     } catch (RowsExceededException e) {   

  24.                         e.printStackTrace();   

  25.                     } catch (WriteException e) {   

  26.                         e.printStackTrace();   

  27.                     }   

  28.   

  29.                 }   

  30.             }   

  31.   

  32.             try {   

  33.                 //从内存中写入文件中   

  34.                 wwb.write();   

  35.                 //关闭资源,释放内存   

  36.                 wwb.close();   

  37.             } catch (IOException e) {   

  38.                 e.printStackTrace();   

  39.             } catch (WriteException e) {   

  40.                 e.printStackTrace();   

  41.             }   

  42.         }   

  43.     }   

三.在一个Excel文件中查找是否包含某一个关键字

java 代码

  1.   

  2.     public static boolean searchKeyWord(File file,String keyWord){   

  3.         boolean res = false;   

  4.            

  5.         Workbook wb = null;   

  6.         try {   

  7.             //构造Workbook(工作薄)对象   

  8.             wb=Workbook.getWorkbook(file);   

  9.         } catch (BiffException e) {   

  10.             return res;   

  11.         } catch (IOException e) {   

  12.             return res;   

  13.         }   

  14.            

  15.         if(wb==null)   

  16.             return res;   

  17.            

  18.         //获得了Workbook对象之后,就可以通过它得到Sheet(工作表)对象了   

  19.         Sheet[] sheet = wb.getSheets();   

  20.            

  21.         boolean breakSheet = false;   

  22.            

  23.         if(sheet!=null&&sheet.length>0){   

  24.             //对每个工作表进行循环   

  25.             for(int i=0;i

  26.                 if(breakSheet)   

  27.                     break;   

  28.                    

  29.                 //得到当前工作表的行数   

  30.                 int rowNum = sheet[i].getRows();   

  31.                    

  32.                 boolean breakRow = false;   

  33.                    

  34.                 for(int j=0;j

  35.                     if(breakRow)   

  36.                         break;   

  37.                     //得到当前行的所有单元格   

  38.                     Cell[] cells = sheet[i].getRow(j);   

  39.                     if(cells!=null&&cells.length>0){   

  40.                         boolean breakCell = false;   

  41.                         //对每个单元格进行循环   

  42.                         for(int k=0;k

  43.                             if(breakCell)   

  44.                                 break;   

  45.                             //读取当前单元格的值   

  46.                             String cellValue = cells[k].getContents();   

  47.                             if(cellValue==null)   

  48.                                 continue;   

  49.                             if(cellValue.contains(keyWord)){   

  50.                                 res = true;   

  51.                                 breakCell = true;   

  52.                                 breakRow = true;   

  53.                                 breakSheet = true;   

  54.                             }   

  55.                         }   

  56.                     }   

  57.                 }   

  58.             }   

  59.         }   

  60.         //最后关闭资源,释放内存   

  61.         wb.close();   

  62.            

  63.         return res;   

  64.     }  

四.往Excel中插入图片图标

插入图片的实现很容易,参看以下代码:

java 代码

  1.   

  2. public static void insertImg(WritableSheet dataSheet, int col, int row, int width,   

  3.         int height, File imgFile){   

  4.     WritableImage img = new WritableImage(col, row, width, height, imgFile);   

  5.     dataSheet.addImage(img);   

  6. }   

以上代码的注释已经很清楚了,大概也就不用再解释了,我们可以用如下程序验证:

java 代码

  1.     try {   

  2.         //创建一个工作薄   

  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. //图片插入到第二行第一个单元格,长宽各占六个单元格   

  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格式都不支持

五.插入页眉页脚

一般的页眉页脚都分为三个部分,左,中,右三部分,利用如下代码可实现插入页眉页脚

java 代码

  1.   

  2. public static void setHeader(WritableSheet dataSheet,String left,String center,String right){   

  3.     HeaderFooter hf = new HeaderFooter();   

  4.     hf.getLeft().append(left);   

  5.     hf.getCentre().append(center);   

  6.     hf.getRight().append(right);   

  7.     //加入页眉   

  8.     dataSheet.getSettings().setHeader(hf);   

  9.     //加入页脚   

  10.     //dataSheet.getSettings().setFooter(hf);   

  11. }  

我们可以用如下代码测试该方法:

java 代码

  1.     try {   

  2.         //创建一个工作薄   

  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.   }   

 

合并单元格:

//首先创建一个sheet

WritableSheet sheetWrite=writeWorkbook.createSheet("sheet的名称",0);

//把 单元格(column, row)到单元格(column1, row1)进行合并

sheetWrite.mergeCells(column, row, column1, row1);

 

 

 

 

java 操作excel,jxl加边框,jxl合并单元格,单元格的设置,单元

WritableCellFormat headerFormat = new WritableCellFormat(
                    HEADER_FONT_STYLE);
            //水平居中对齐
            headerFormat.setAlignment(Alignment.CENTRE);
            //竖直方向居中对齐
            headerFormat.setVerticalAlignment

(VerticalAlignment.CENTRE);
           
            //建立标签,参数依次为:列索引、行索引、内容、格式
            Label seqLabel = new Label(0, 0, "序号", headerFormat);
            //增加单元格
            sheet.addCell(seqLabel);
            //合并单元格,参数依次为:列索引、行索引、列索引+需要合并

的列的个数、行索引+需要合并的行的个数
            sheet.mergeCells(0, 0, 0, 1);
            //设置单元格宽度,以字符为单位
            sheet.setColumnView(0, "序号".length() + 10);

            Label basicInfoLabel = new Label(1, 0, "基本信息",

headerFormat);
            sheet.addCell(basicInfoLabel);
            sheet.mergeCells(1, 0, 3, 0);//合并垮了3行。

         sheet.mergeCells(1, 1, 1, 3);//合并垮了3列。

 

         label = new Label(0, 1, "苹果”);
         sheet.mergeCells(0,1, 0, 3- 1);//合并垮了3列。
         WritableCellFormat cellFormat = new WritableCellFormat();
         cellFormat.setVerticalAlignment(VerticalAlignment.CENTRE);

// 垂直居中
         label.setCellFormat(cellFormat);
         sheet.addCell(label);

         注:再次使cellFormat时,需要重新NEW WritableCellFormat 。