`
hbcui1984
  • 浏览: 149409 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

利用java操作Excel文件

    博客分类:
  • java
阅读更多

利用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){   
  6.     StringBuffer sb = new StringBuffer();   
  7.        
  8.     Workbook wb = null;   
  9.     try {   
  10.         //构造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.         //对每个工作表进行循环   
  26.         for(int i=0;i
  27.             //得到当前工作表的行数   
  28.             int rowNum = sheet[i].getRows();   
  29.             for(int j=0;j
  30.                 //得到当前行的所有单元格   
  31.                 Cell[] cells = sheet[i].getRow(j);   
  32.                 if(cells!=null&&cells.length>0){   
  33.                     //对每个单元格进行循环   
  34.                     for(int k=0;k
  35.                         //读取当前单元格的值   
  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.     //最后关闭资源,释放内存   
  46.     wb.close();   
  47.     return sb.toString();   
  48. }  

二.写入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,   
  10.         int height, File imgFile){   
  11.     WritableImage img = new WritableImage(col, row, width, height, imgFile);   
  12.     dataSheet.addImage(img);   
  13. }   

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

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. /**向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.         //创建一个工作薄   
  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.   }   
分享到:
评论
21 楼 hgq0011 2007-03-02  
leerq 写道
我现在使用的是apache的一个POI开源项目来处理EXCEL的, 在处理方面好象都差不多


这个组件也很不错。spring中也是用它。
20 楼 leerq 2007-03-02  
我现在使用的是apache的一个POI开源项目来处理EXCEL的, 在处理方面好象都差不多
19 楼 thurm_zhang 2007-03-02  
<br/>
<strong>yueguangyuan 写道:</strong><br/>
<div class='quote_div'>
<p>一直在使用POI,不知道这个东西与POI比谁更有优势 能否给出一些两者得比较</p>
<p>我想使用POI得人应该是多一些</p>
</div>
<br/>
POI好像对formula支持不是很好,你们是怎么解决的?<br/>
<br/>
18 楼 hgq0011 2007-03-01  
hbcui1984 写道
hgq0011 写道
请问能不能在其中加入图片(能支持大部分的图片文件格式)呢?

我看了一下jxl的demo,好像只支持png格式的图片,其他格式的图片都不支持,插入图片的实现代码已经加入到例子中

是的,好象它只对png格式的支持,也不知道为什么对其它的格式不支持?我们有很多的excel报表要生成,没有找到支持图片的方法,所以该用宏来生成。:(
17 楼 hbcui1984 2007-03-01  
有人知道怎么读取Excel的表头吗?
表头一般都是第一行或者第一列,但是如何才能知道该单元格是表头呢?
16 楼 hbcui1984 2007-03-01  
hgq0011 写道
请问能不能在其中加入图片(能支持大部分的图片文件格式)呢?

我看了一下jxl的demo,好像只支持png格式的图片,其他格式的图片都不支持,插入图片的实现代码已经加入到例子中
15 楼 yueguangyuan 2007-03-01  
<p>一直在使用POI,不知道这个东西与POI比谁更有优势 能否给出一些两者得比较</p>
<p>我想使用POI得人应该是多一些</p>
14 楼 zhangzm 2007-03-01  
学习一下
13 楼 xuehongliang 2007-02-28  
学习学习.
12 楼 fins 2007-02-28  
如果大家对使用java操作excel感兴趣
可以去下在ecside的代码

里面的导出excel功能就使用了jxl (原先是poi后来我换成了jxl)

里面用到了一些 相对高级一些的jxl特性
(例如设置格式 设置样式 合并单元格等)

适合初学者学习
11 楼 hlxiong 2007-02-28  
楼主的学习能力很强!
10 楼 hbcui1984 2007-02-28  
qingjian 写道
想问一下lz在写excel文件的时候数据量过大的话jvm会内存溢出请教一下还有什么好的方法能解决

我的想法是,可以将文件分割,先生成一个小文件1.xls,然后将后续内容写入一个新的文件中2.xls,然后再将2.xls的内容复制到1.xls的后边
这只是我的想法,还没模拟过特别大的文件,没有真正实践过
9 楼 hbcui1984 2007-02-28  
hgq0011 写道
请问能不能在其中加入图片(能支持大部分的图片文件格式)呢?

在写Excel文件时,插入图片我还没能实现,现在只会对Excel文件中单元格内容进行修饰,比如加粗,变换字体,加上字体颜色等。。。

读取Excel文件时,如果是图片的话,我也还没考虑过,大家一起研究一下
8 楼 NoName 2007-02-28  
正好用的上,谢谢,哈哈
7 楼 hgq0011 2007-02-28  
请问能不能在其中加入图片(能支持大部分的图片文件格式)呢?
6 楼 我不知道 2007-02-27  
qingjian 写道
想问一下lz在写excel文件的时候数据量过大的话jvm会内存溢出请教一下还有什么好的方法能解决
你写了多大的文件,到多少的时候溢出了。
能不能大到一定程度,重新生成新文件?
5 楼 qingjian 2007-02-27  
想问一下lz在写excel文件的时候数据量过大的话jvm会内存溢出请教一下还有什么好的方法能解决
4 楼 hbcui1984 2007-02-27  
很是奇妙,我把代码删了,重新贴了一次,还是这样,for循环还是半边。。。
3 楼 hbcui1984 2007-02-26  
ahuaxuan 写道
lz贴的代码是不是有点问题啊,for循环那里都少了半边,还是补完整吧


谢谢提醒,我编辑了一下,重新提交,结果发现for循环还是少了半边。。。
好奇怪,难道是javaeye的代码编辑器出问题了(瞎猜的 )?
2 楼 ahuaxuan 2007-02-26  
lz贴的代码是不是有点问题啊,for循环那里都少了半边,还是补完整吧

相关推荐

    利用JAVA操作EXCEL文件

    利用JAVA操作EXCEL文件 利用JAVA操作EXCEL文件

    利用 JAVA 操作 EXCEL 文件

    利用 JAVA 操作 EXCEL 文件 使用 Windows 操作系统的朋友对 Excel(电子表格)一定不会陌生,但是要使用 Java 语言来操纵 Excel 文件并不是一件容易的事。在 Web 应用日益盛行的今天,通过 Web 来操作 Excel 文件的...

    利用JAVA操作EXCEL文件.pdf

    通过它JAVA开发人员可以读取EXCEL文件的内容,创建新的EXCEL文件,更新已经存在的EXCEL文件。

    jax学习文档和一些学习的例子,利用JAVA操作EXCEL文件

    Java Excel是一开放源码项目,通过它Java开发人员可以读取Excel文件的内容、创建新的Excel文件、更新已经存在的Excel文件。使用该API非Windows操作系统也可以通过纯Java应用来处理Excel数据表。因为是使用Java编写的...

    利用java操作Excel文件的方法

    以下是对利用java操作Excel文件的方法进行了详细的介绍,需要的朋友可以过来参考下

    利用Java生成Excel文件

    利用Java生成Excel文件,用java来操作excel文件方便实用

    java读取excel文件

    如何利用java来编写读取excel的方法,代码

    java poi 根据excel模板生成excel文件

    java poi 根据excel模板生成excel文件,利用poijar包根据已有excel模板,生成基于模板的新文件,jar包也在压缩包内,导入即可使用。

    利用jxl操作excel文件

    利用jxl操作excel文件,提取exce文件数据生成txt文件。

    Java版Excel文件的导入和导出

    Java版Excel文件的导入和导出,利用POI操作excel文件

    利用Java实现复制Excel工作表功能

    主要给大家介绍了关于如何利用Java实现复制Excel工作表功能的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用java具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧

    java利用jxl生成excel文件

    java利用jxl生成excel文件,代码直接导入就可以跑(修改自己的生成的ecxel地址)

    java导出TXT和Excel文件

    搭建SSH框架,利用JSP前台调用Action类中的方法,从数据库读出数据,导出TXT文件和Excel文件。TXT文件导出只用到流操作。导出Excel文件利用apache的poi第三方包,可在阿帕奇官网下载(最新版本为3.8,支持office2010...

Global site tag (gtag.js) - Google Analytics