POI实现Java程序操作Excel报表的应用分析
■ 中国人民银行南昌中心支行 王暹昊 中国人民银行上饶市中心支行 朱勇士
报表输出是Java应用开发中经常涉及的内容,而一般的报表往往缺乏通用性,不方便用户进行个性化编辑。Java程序由于其跨平台特性,不能直接操纵Excel。鉴于此,本文探讨一下POI实现Java程序中操作Excel报表的应用。
还有辅助操作等。最主要的对象见表1所列。
表1 POI的主要对象
POI对象名称HSSFWordbookHSSFSheetHSSFRowHSSFCell对应的Excel对象工作簿工作表表格行单元格一、POI简介
Jakarta POI 是apache的子项目,目标是处理ole2对象。它提供了一组操纵Windows文档的Java API 。目前比较成熟的是HSSF(Horrible SpreadSheet Format)接口,处理MS Excel(97-2002)对象。 通过HSSF,开发人员可以用纯Java代码来读取、写入、修改Excel文件。
(一)POI的简单应用
下例中,实现的主要功能为:使用表1中的对象在程序的当前目录下创建一个Excel文件test.xls,在第一个单元格中写入内容,然后读出该单元格的内容。主要程序部分为:
public class CreateExcelReport {
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);cell.setEncoding(HSSFCell.ENCODING_UTF_16);
二、POI应用配置
POI包可以在Apache 官方网站下载。下载后,解压缩得到如图1所示的目录结构。在应用中主要用poi-3.1-FINAL-20080629.jar这个库文件。如果是纯Java应用程序,需把该文件的路径添加到系统环境变量classpath中,否则无法编译;如果是Java Web应用,则需要将该库文件部署到应用程序的\\WEB-INF\\lib目录下。
图1 POI的目录结构
三、POI的应用
POI提供给用户使用的对象在org.apache.poi.hssf.usermodel包中,主要部分包括Excel对象、样式和格式,
2010年第7期
FINANCIAL COMPUTER OF HUANAN47
软件服务栏目编辑:梁春丽 E-mail:lianglizi505@163.com
//往第一个单元格中写入信息cell.setCellValue(\"测试消息\");
FileOutputStream fOut = new FileOutputStream(xlsFile);workbook.write(fOut);fOut.flush();
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,可以方便地将数据库中的数据导出生成Excel报表,也可以读取上传的Excel报表,并将其内容写入数据库表中保存。以下是将数据中的数据读取出来并生成Excel报表的关键代码:
/*把数据集rs中的数据导出至Excel工作表中*/public static void dataToExcel(ResultSet rs,String xlsName) {
HSSFWorkbook workbook = new HSSFWorkbook();HSSFSheet sheet = workbook.createSheet();
workbook.setSheetName(0, \"sheet1\",HSSFWorkbook.ENCODING_UTF_16);
HSSFRow row= sheet.createRow((short)0);HSSFCell cell;int iRow=1;
//写入各条记录,每条记录对应Excel中的一行try{
//第一行为表头//第一列
cell = row.createCell((short)0);
482010年第7期
FINANCIAL COMPUTER OF HUANAN
cell.setCellType(HSSFCell.CELL_TYPE_STRING);cell.setEncoding(HSSFCell.ENCODING_UTF_16);cell.setCellValue(\"用户编码\");//第二列
cell = row.createCell((short)1);
cell.setCellType(HSSFCell. CELL_TYPE_STRING);cell.setEncoding(HSSFCell.ENCODING_UTF_16);cell.setCellValue(\"用户姓名\");while(rs.next()){
//iRow初始值为1,表示从第二行开始写数据(第一行为表头)
row= sheet.createRow((short)iRow);
//此处以该数据集的每条记录有两个字段为例//如果数据类型一样,可以考虑使用循环 cell = row.createCell((short)0);
cell.setCellType(HSSFCell.CELL_TYPE_STRING);cell.setEncoding(HSSFCell.ENCODING_UTF_16);cell.setCellValue(rs.getString(1));cell = row.createCell((short)1);
cell.setCellType(HSSFCell. CELL_TYPE_STRING);cell.setEncoding(HSSFCell.ENCODING_UTF_16);cell.setCellValue(rs.getDouble(2));} iRow++;
}
FileOutputStream fOut = new FileOutputStream(xlsName);
workbook.write(fOut);fOut.flush();fOut.close(); }catch(Exception e) {System.out.println(e);}
}四、总结
POI功能强大,本文只是简单地介绍了它的主要功能,其他功能本文不一一举例,具体可以参考其帮助文档。总之,使用POI可以较好地解决Java编程中的Excel报表问题,很好地满足用户的需求。
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- efsc.cn 版权所有 赣ICP备2024042792号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务