引言
报表输出是开发数据库应用程序经常涉及的内容,而一般的报表往往缺乏通用性,不方便用户进行个性化编辑。excel是windos平台上优秀的电子表格软件,如果把报表输出成excel格式,用户就可以利用excel的强大功能对报表进行再编辑,以满足自己的特殊需要。但是,长期以来,java程序由于其跨平台特性,不能直接操纵excel。为了实现纯java的excel解决方案,apache jakara推出了一个免费的开源项目poi。poi目前已比较成熟,可以处理ms excel(97 - 2002)对象。国内已经有部分公司在他们的办公自动化等web项目中使用poi了。
poi的下载与安装
请到网站http://jakarta.apache.org/site/downloads/downloads_poi.cgi右击超链接2.5.1.zip下载压缩包poi-bin-2.5.1-final-20040804.zip,解压缩后得到如图2.1所示的目录结构。我们主要用到poi-2.5.1-final-20040804.jar这个库文件。请把poi-2.5.1-final-20040804.jar这个文件的路径添加到系统环境变量classpath中,否则无法编译下面的示例程序。

图2.1 poi的目录结构
poi使用初步
poi提供给用户使用的对象在org.apache.poi.hssf.usermodel包中,主要部分包括excel对象、样式和格式,还有辅助操作等。
最主要的几个对象如表3.1所示:
表3.1 poi主要对象
下面我们来看如下的例子,使用表3.1中的对象在程序的当前目录下创建一个excel文件test.xls,在第一个单元格中写入内容,然后读出第一个单元格的内容。
完整的程序如下:
与数据库结合使用
使用poi,结合jdbc编程技术,我们就可以方便地将数据库中的数据导出生成excel报表。其关键代码如下:
结束语
poi功能强大,还可以设置单元格格式、设置页眉页脚等。限于篇幅的关系就不一一举例了,感兴趣的读者可以参考其帮助文档(在图2.1的doc文件夹中)。总之,使用poi,我们可以较好地解决java编程中的excel报表问题,进一步满足用户的需求
报表输出是开发数据库应用程序经常涉及的内容,而一般的报表往往缺乏通用性,不方便用户进行个性化编辑。excel是windos平台上优秀的电子表格软件,如果把报表输出成excel格式,用户就可以利用excel的强大功能对报表进行再编辑,以满足自己的特殊需要。但是,长期以来,java程序由于其跨平台特性,不能直接操纵excel。为了实现纯java的excel解决方案,apache jakara推出了一个免费的开源项目poi。poi目前已比较成熟,可以处理ms excel(97 - 2002)对象。国内已经有部分公司在他们的办公自动化等web项目中使用poi了。
poi的下载与安装
请到网站http://jakarta.apache.org/site/downloads/downloads_poi.cgi右击超链接2.5.1.zip下载压缩包poi-bin-2.5.1-final-20040804.zip,解压缩后得到如图2.1所示的目录结构。我们主要用到poi-2.5.1-final-20040804.jar这个库文件。请把poi-2.5.1-final-20040804.jar这个文件的路径添加到系统环境变量classpath中,否则无法编译下面的示例程序。

图2.1 poi的目录结构
poi使用初步
poi提供给用户使用的对象在org.apache.poi.hssf.usermodel包中,主要部分包括excel对象、样式和格式,还有辅助操作等。
最主要的几个对象如表3.1所示:
表3.1 poi主要对象
| poi对象名称 | 所对应的excel对象 |
| hssfworkbook | 工作簿 |
| hssfsheet | 工作表 |
| hssfrow | 行 |
| hssfcell | 单元格 |
下面我们来看如下的例子,使用表3.1中的对象在程序的当前目录下创建一个excel文件test.xls,在第一个单元格中写入内容,然后读出第一个单元格的内容。
完整的程序如下:
| import org.apache.poi.hssf.usermodel.hssfworkbook; import org.apache.poi.hssf.usermodel.hssfsheet; import org.apache.poi.hssf.usermodel.hssfrow; import org.apache.poi.hssf.usermodel.hssfcell; import java.io.fileoutputstream; import java.io.fileinputstream; public class createxl { public static string xlsfile="test.xls"; //产生的excel文件的名称 public static void main(string args[]) { try { hssfworkbook workbook = new hssfworkbook(); //产生工作簿对象 hssfsheet sheet = workbook.createsheet(); //产生工作表对象 //设置第一个工作表的名称为firstsheet //为了工作表能支持中文,设置字符编码为utf_16 workbook.setsheetname(0,"firstsheet",hssfworkbook.encoding_utf_16); //产生一行 hssfrow row = sheet.createrow((short)0); //产生第一个单元格 hssfcell cell = row.createcell((short) 0); //设置单元格内容为字符串型 cell.setcelltype(hssfcell.cell_type_string); //为了能在单元格中写入中文,设置字符编码为utf_16。 cell.setencoding(hssfcell.encoding_utf_16); //往第一个单元格中写入信息 cell.setcellvalue("测试成功"); fileoutputstream fout = new fileoutputstream(xlsfile); workbook.write(fout); fout.flush(); fout.close(); system.out.println("文件生成..."); //以下语句读取生成的excel文件内容 fileinputstream fin=new fileinputstream(xlsfile); hssfworkbook readworkbook= new hssfworkbook(fin); hssfsheet readsheet= readworkbook.getsheet("firstsheet"); hssfrow readrow =readsheet.getrow(0); hssfcell readcell = readrow.getcell((short)0); system.out.println("第一个单元是:" + readcell.getstringcellvalue()); } catch(exception e) { system.out.println(e); } } } |
与数据库结合使用
使用poi,结合jdbc编程技术,我们就可以方便地将数据库中的数据导出生成excel报表。其关键代码如下:
| /*把数据集rs中的数据导出至excel工作表中。 *传入参数:数据集rs,excel文件名称xlsname,工作表名称sheetname。 */ public static void resultsettoexcel(resultset rs,string xlsname,string sheetname) throws exception { hssfworkbook workbook = new hssfworkbook(); hssfsheet sheet = workbook.createsheet(); workbook.setsheetname(0,sheetname,hssfworkbook.encoding_utf_16); hssfrow row= sheet.createrow((short)0);; hssfcell cell; resultsetmetadata md=rs.getmetadata(); int ncolumn=md.getcolumncount(); //写入各个字段的名称 for(int i=1;i<=ncolumn;i++) { cell = row.createcell((short)(i-1)); cell.setcelltype(hssfcell.cell_type_string); cell.setencoding(hssfcell.encoding_utf_16); cell.setcellvalue(md.getcolumnlabel(i)); } int irow=1; //写入各条记录,每条记录对应excel中的一行 while(rs.next()) {row= sheet.createrow((short)irow);; for(int j=1;j<=ncolumn;j++) { cell = row.createcell((short)(j-1)); cell.setcelltype(hssfcell.cell_type_string); cell.setencoding(hssfcell.encoding_utf_16); cell.setcellvalue(rs.getobject(j).tostring()); } irow++; } fileoutputstream fout = new fileoutputstream(xlsname); workbook.write(fout); fout.flush(); fout.close(); joptionpane.showmessagedialog(null,"导出数据成功!"); } |
结束语
poi功能强大,还可以设置单元格格式、设置页眉页脚等。限于篇幅的关系就不一一举例了,感兴趣的读者可以参考其帮助文档(在图2.1的doc文件夹中)。总之,使用poi,我们可以较好地解决java编程中的excel报表问题,进一步满足用户的需求
闽公网安备 35060202000074号