报表输出是开发数据库应用程序经常涉及的内容,而一般的报表往往缺乏通用性,不方便用户进行个性化编辑。Excel是Windos平台上优秀的电子表格软件,如果把报表输出成Excel格式,用户就可以利用Excel的强大功能对报表进行再编辑,以满足自己的特殊需要。但是,长期以来,Java程序由于其跨平台特性,不能直接操纵Excel与数据库结合使用
使用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功能强大,还可以设置单元格格式、设置页眉页脚等。