项目需求 在统计网站数据时,用户往往希望 能把下载量,注册用户数等统计数据导出到EXCEL表中.在JAVA中我们可以使用JXL包方便的实现该功能.
由于我们的项目使用struts.spring,hibernate等技术,因此我们可以在查询统计数据的ACTION中将统计数据写到EXCEL表中,在查询页面用户就可以直接导出EXCEL文件.ACTION中的代码如下
Date date=new Date();
long date_long=date.getTime();
String path=request.getSession().getServletContext().getRealPath("/excel/");
File file=new File(path);
if(!file.exists())
{
file.mkdir();
}
String filepath=path+"/"+date_long+".xls";//生成EXCEL文件名
try {
jxl.write.WritableWorkbook wwb=null;
wwb=jxl.Workbook.createWorkbook(new java.io.File(filepath));
jxl.write.WritableSheet ws=wwb.createSheet("统计报表", 0); //创建EXCEL文件
int rows=0;
int step=0;
jxl.write.Label lable1=new jxl.write.Label(step, rows, "统计日期");//生成字段
ws.addCell(lable1);
jxl.write.Label lable3=new jxl.write.Label(step+2, rows, "下载量");
ws.addCell(lable3);
jxl.write.Label lable4=new jxl.write.Label(step+3, rows, "用户注册数");
ws.addCell(lable4);
if(list!=null&&list.size()>0)
{
for(rows=1;rows<list.size()+1;rows++)//生成内容
{
UserRegdownByHourInfo mag=(UserRegdownByHourInfo)list.get(rows-1);
jxl.write.Label lable11=new jxl.write.Label(step, rows, mag.getChannelid());
ws.addCell(lable11);
jxl.write.Number lable33=null;
if(mag.getDowntotal()!=null)
{
lable33=new jxl.write.Number(step+2, rows, mag.getDowntotal());
}
else
{
lable33=new jxl.write.Number(step+2, rows,0 );
}
ws.addCell(lable33);
jxl.write.Number lable44=null;
if(mag.getRegistertotal()!=null)
{
lable44=new jxl.write.Number(step+3, rows,mag.getRegistertotal());
}
else
{
lable44=new jxl.write.Number(step+3, rows,0);
}
ws.addCell(lable44);
}
}
wwb.write();
wwb.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
request.setAttribute("filepath", filepath);//将EXCEL文件名传给JSP页面
对应的JSP代码
<a href="<bean:write name="filepath" />" target='blank' >导出为excel文档</a>(右键单击另存为)