日期:2014-05-16  浏览次数:20973 次

Apache POI组件操作Excel,制作报表(一) (转)

Apache的POI组件是Java操作Microsoft Office办公套件的强大API,其中对Word,Excel和PowperPoint都有支持,当然使用较多的还是Excel,因为Word和 PowerPoint用程序动态操作的应用较少。那么本文就结合POI来介绍一下操作Excel的方法。
??? Office 2007的文件结构完全不同于2003,所以对于两个版本的Office组件,POI有不同的处理API,分开使用即可。首先来说几个Excel的基本概 念。对于一个Excel文件,这称为一个工作簿(Workbook),打开Excel之后,在下方会有sheet1/2/3这样的选项卡,点击可以切换到 不同的sheet中,这个sheet称作工作表。每个工作表就是我们编辑的区域,这是一张二维表,阿拉伯数字控制行数,从1开始,而程序中还是0,类似数 组和集合。字母控制列数,从A开始,Z以后是两个字母控制。对于每一行,我们称为Row,列就是Column,行列可以确定唯一的一个元素,那么就是单元 格,称为Cell。
??? POI组件可以方便的操纵这些元素,但初次接触POI可能会有畏惧心理,因为要对每个单元格进行设置,那么不管是用数组还是集合,从工作簿,工作表,行下来的代码量都不会小,这是不能避免的,但是按照这个处理顺序走,就一定可以得到结果。
??? 有了这些基础的概念之后,我们就可以操作Excel了。先来看一下所需的依赖,因为涉及到2007,就要额外加一些依赖。

??? 下面从读取Excel开始,首先建立一个Excel 2003以下版本的xls文件。设定几列来看。来存储学生信息的Excel表如下:

??? 这里的姓名,性别和班级是文本值,而年龄和成绩是数字值,这在设计对象和处理时要注意区分。那么可以如下设计这个对象:

Java代码
  1. package ?org.ourpioneer.excel.bean;??
  2. /** ?
  3. ?*?学生信息 ?
  4. ?*? ?
  5. ?*?@author?Nanlei ?
  6. ?*? ?
  7. ?*/ ??
  8. public ? class ?Student?{??
  9. ????private ?String?name;??
  10. ????private ?String?gender;??
  11. ????private ? int ?age;??
  12. ????private ?String?sclass;??
  13. ????private ? int ?score;??
  14. ????public ?Student()?{??
  15. ????????super ();??
  16. ????}??
  17. ????public ?Student(String?name,?String?gender,? int ?age,?String?sclass,? int ?score)?{??
  18. ????????super ();??
  19. ????????this .name?=?name;??
  20. ????????this .gender?=?gender;??
  21. ????????this .age?=?age;??
  22. ????????this .sclass?=?sclass;??
  23. ????????this .score?=?score;??
  24. ????}??
  25. //省略了getter和setter方法 ??
  26. ????@Override ??
  27. ????public ?String?toString()?{??
  28. ????????return ? "Student?[age=" ?+?age?+? ",?gender=" ?+?gender?+? ",?name=" ?+?name??
  29. ????????????????+?",?sclass=" ?+?sclass?+? ",?score=" <