利用java操作Excel文件

利用java操作Excel文件
        很久以来都想研究一下利用java操作Excel的方法,今天没事,就稍微了解了一下,特总结一下。利用java操作Excel,有个开源的东东-jxl.jar,可以到http://sourceforge.net/project/showfiles.php?group_id=79926下载。

一.读取Excel文件内容

java 代码
1./**读取Excel文件的内容  
2. * @param file  待读取的文件  
3. * @return  
4. */  
5.public static String readExcel(File file){   
1.    StringBuffer sb = new StringBuffer();   
2.       
3.    Workbook wb = null;   
4.    try {   
5.        //构造Workbook(工作薄)对象   
6.        wb=Workbook.getWorkbook(file);   
7.    } catch (BiffException e) {   
8.        e.printStackTrace();   
9.    } catch (IOException e) {   
10.        e.printStackTrace();   
11.    }   
12.       
13.    if(wb==null)   
14.        return null;   
15.       
16.    //获得了Workbook对象之后,就可以通过它得到Sheet(工作表)对象了   
17.    Sheet[] sheet = wb.getSheets();   
18.       
19.    if(sheet!=null&&sheet.length>0){   
20.        //对每个工作表进行循环   
21.        for(int i=0;i
22.            //得到当前工作表的行数   
23.            int rowNum = sheet[i].getRows();   
24.            for(int j=0;j
25.                //得到当前行的所有单元格   
26.                Cell[] cells = sheet[i].getRow(j);   
27.                if(cells!=null&&cells.length>0){   
28.                    //对每个单元格进行循环   
29.                    for(int k=0;k
30.                        //读取当前单元格的值   
31.                        String cellValue = cells[k].getContents();   
32.                        sb.append(cellValue+"\t");   
33.                    }   
34.                }   
35.                sb.append("\r\n");   
36.            }   
37.            sb.append("\r\n");   
38.        }   
39.    }   
40.    //最后关闭资源,释放内存   
41.    wb.close();   
42.    return sb.toString();   
43.}  
二.写入Excel文件

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

java 代码
1./**生成一个Excel文件  
2.     * @param fileName  要生成的Excel文件名  
3.     */  
4.    public static void writeExcel(String fileName){   
5.        WritableWorkbook wwb = null;   
6.        try {   
7.            //首先要使用Workbook类的工厂方法创建一个可写入的工作薄(Workbook)对象   
8.            wwb = Workbook.createWorkbook(new File(fileName));   
9.        } catch (IOException e) {   
10.            e.printStackTrace();   
11.        }   
12.        if(wwb!=null){   
13.            //创建一个可写入的工作表   
14.            //Workbook的createSheet方法有两个参数,第一个是工作表的名称,第二个是工作表在工作薄中的位置   
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中,第一个参数表示列,第二个表示行   
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.                //从内存中写入文件中   
36.                wwb.write();   
37.                //关闭资源,释放内存   
38.                wwb.close();   
39.            } catch (IOException e) {   
40.                e.printStackTrace();   
41.            } catch (WriteException e) {   
42.                e.printStackTrace();   
43.            }   
44.        }   
45.    }   
三.在一个Excel文件中查找是否包含某一个关键字

java 代码
1./**搜索某一个文件中是否包含某个关键字  
2.     * @param file  待搜索的文件  
3.     * @param keyWord  要搜索的关键字  
4.     * @return  
5.     */  
6.    public static boolean searchKeyWord(File file,String keyWord){   
7.        boolean res = false;   
8.           
9.        Workbook wb = null;   
10.        try {   
11.            //构造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.            //对每个工作表进行循环   
29.            for(int i=0;i
30.                if(breakSheet)   
31.                    break;   
32.                   
33.                //得到当前工作表的行数   
34.                int rowNum = sheet[i].getRows();   
35.                   
36.                boolean breakRow = false;   
37.                   
38.                for(int j=0;j
39.                    if(breakRow)   
40.                        break;   
41.                    //得到当前行的所有单元格   
42.                    Cell[] cells = sheet[i].getRow(j);   
43.                    if(cells!=null&&cells.length>0){   
44.                        boolean breakCell = false;   
45.                        //对每个单元格进行循环   
46.                        for(int k=0;k
47.                            if(breakCell)   
48.                                break;   
49.                            //读取当前单元格的值   
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.        //最后关闭资源,释放内存   
65.        wb.close();   
66.           
67.        return res;   
68.    }  
四.往Excel中插入图片图标

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

java 代码
1./**往Excel中插入图片  
2. * @param dataSheet  待插入的工作表  
3. * @param col 图片从该列开始  
4. * @param row 图片从该行开始  
5. * @param width 图片所占的列数  
6. * @param height 图片所占的行数  
7. * @param imgFile 要插入的图片文件  
8. */  
9.public static void insertImg(WritableSheet dataSheet, int col, int row, int width,   
1.        int height, File imgFile){   
2.    WritableImage img = new WritableImage(col, row, width, height, imgFile);   
3.    dataSheet.addImage(img);   
4.}   
以上代码的注释已经很清楚了,大概也就不用再解释了,我们可以用如下程序验证:

java 代码
1.    try {   
2.        //创建一个工作薄   
3.WritableWorkbook workbook = Workbook.createWorkbook(new File("D:/test1.xls"));   
4.//待插入的工作表   
1.WritableSheet imgSheet = workbook.createSheet("Images",0);   
2.//要插入的图片文件   
1.File imgFile = new File("D:/1.png");   
2.//图片插入到第二行第一个单元格,长宽各占六个单元格   
1.insertImg(imgSheet,0,1,6,6,imgFile);   
2.workbook.write();   
3.workbook.close();   
4. catch (IOException e) {   
5.e.printStackTrace();   
6. catch (WriteException e) {   
7.e.printStackTrace();   
但是jxl只支持png格式的图片,jpg格式和gif格式都不支持
五.插入页眉页脚

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

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){  
1.    HeaderFooter hf = new HeaderFooter();  
2.    hf.getLeft().append(left);  
3.    hf.getCentre().append(center);  
4.    hf.getRight().append(right);  
5.    //加入页眉  
6.    dataSheet.getSettings().setHeader(hf);  
7.    //加入页脚  
8.    //dataSheet.getSettings().setFooter(hf);  
9.} 
我们可以用如下代码测试该方法:

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

你可能感兴趣的:(java,工作,Excel,单元测试,J#)