javaEXCEL导出的问题 在线等的 高手进。。。。

lxs512297816 2010-06-18 06:39:40
导出成xls格式的 有大量的数据 大约600万就会出现内存溢出。。。怎样解决这个问题。。。。。。。。。
用的是jxl。。。下面是代码。。。
//生成EXCEL文件
public void cpmLogEXCEL(){

String startTime="";
String endTime="";
if(getParamFromRequest("startTime1")!=null){
startTime=getParamFromRequest("startTime1");
}
if(getParamFromRequest("endTime1")!=null){
endTime=getParamFromRequest("endTime1");
}
String scpid=getParamFromRequest("cpid");
String actionTag=getParamFromRequest("actionTag");
String schannelid=getParamFromRequest("channelid");

Timestamp t_date1 = null;
Timestamp t_date2 = null;




SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//String time = df.format(new Date());
Date date1 = null;
Date date2= null;

if(!"".equals(startTime) && !"".equals(endTime) && !startTime.equals(endTime)){
try {
date1=df.parse(startTime);
date2=df.parse(endTime);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
t_date1 = new Timestamp(date1.getTime());
t_date2 = new Timestamp(date2.getTime());
Long cpid=null;
if(scpid!=null && scpid.length()>0){
cpid=Long.valueOf(scpid);
}
Long channelid = null;
if(schannelid!=null&&!"".equals(schannelid)){
channelid=Long.valueOf(schannelid);
}
HttpServletResponse response = (HttpServletResponse)ActionContext.getContext().get(ServletActionContext.HTTP_RESPONSE);
response.setContentType("application/x-msdownload");
response.setHeader("Content-Disposition", "attachment; filename=\"CpmLog.xls\"");
response.setContentType("text/html;charset=utf-8");

try{
cpLoglist=cpmLogMgr.getCpLogListvo(t_date1, t_date2, cpid, msg, actionTag, channelid);


if(null!=(String)getParamFromSession("UserID") && !"".equals((String)getParamFromSession("UserID")) )
{
//添加日志
String UserID = (String)getParamFromSession("UserID");//UserID
String UserUID=(String)getParamFromSession("UserUID");//帐号

AdminLog adminlogvo=new AdminLog("2","16","16",Long.parseLong(UserID),UserUID,"业务日志HTML格式导出");
SaveLog.saveAdminLog(adminlogvo);
}

OutputStream os=response.getOutputStream();
WritableWorkbook book=Workbook.createWorkbook(os);



WritableSheet wsheet=book.createSheet("cp事件日志", 0);
Label label=null;
//加列名
// label=new Label(0,0,"日志id");
// wsheet.addCell(label);
label=new Label(0,0,"日志时间");
wsheet.addCell(label);
label=new Label(1,0,"动作标签");
wsheet.addCell(label);
label=new Label(2,0,"资源名称");
wsheet.addCell(label);
label=new Label(3,0,"操作者名称");
wsheet.addCell(label);
label=new Label(4,0,"操作者ID");
wsheet.addCell(label);
label=new Label(5,0,"频道ID");
wsheet.addCell(label);
label=new Label(6,0,"CPID");
wsheet.addCell(label);
label=new Label(7,0,"栏目ID");
wsheet.addCell(label);
label=new Label(8,0,"专区ID");
wsheet.addCell(label);
label=new Label(9,0,"内容ID");
wsheet.addCell(label);
label=new Label(10,0,"产品ID");
wsheet.addCell(label);
label=new Label(11,0,"章ID");
wsheet.addCell(label);
label=new Label(12,0,"日志内容");
wsheet.addCell(label);
label=new Label(13,0,"发生位置");
wsheet.addCell(label);
label=new Label(14,0,"内容类型");
wsheet.addCell(label);

for(int r=0; r<cpLoglist.size(); r++){

label=new Label(0,r+1,cpLoglist.get(r).getLogTime()+"");
wsheet.addCell(label);
label=new Label(1,r+1,cpLoglist.get(r).getActionTag()+"");
wsheet.addCell(label);
label=new Label(2,r+1,cpLoglist.get(r).getResourceName()+"");
wsheet.addCell(label);
label=new Label(3,r+1,cpLoglist.get(r).getOperatorName()+"");
wsheet.addCell(label);
label=new Label(4,r+1,cpLoglist.get(r).getOperatorId()+"");
wsheet.addCell(label);
label=new Label(5,r+1,cpLoglist.get(r).getBusinessSortId()+"");
wsheet.addCell(label);
label=new Label(6,r+1,cpLoglist.get(r).getCpId()+"");
wsheet.addCell(label);
label=new Label(7,r+1,cpLoglist.get(r).getColId()+"");
wsheet.addCell(label);
label=new Label(8,r+1,cpLoglist.get(r).getCatalogId()+"");
wsheet.addCell(label);
label=new Label(9,r+1,cpLoglist.get(r).getContentId()+"");
wsheet.addCell(label);
label=new Label(10,r+1,cpLoglist.get(r).getProductId()+"");
wsheet.addCell(label);
label=new Label(11,r+1,cpLoglist.get(r).getChapterId()+"");
wsheet.addCell(label);
label=new Label(12,r+1,cpLoglist.get(r).getMsg()+"");
wsheet.addCell(label);
label=new Label(13,r+1,cpLoglist.get(r).getPosition()+"");
wsheet.addCell(label);
label=new Label(14,r+1,cpLoglist.get(r).getContentType()+"");
wsheet.addCell(label);


}
book.write();
book.close();
}catch (Exception e) {
e.printStackTrace();
}
}
}
...全文
144 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
jypapgl 2010-06-19
  • 打赏
  • 举报
回复
mark 电信的人来帮解决吧
qingzhe2008 2010-06-18
  • 打赏
  • 举报
回复
怎么大数据量,就放一个sheet里,不能分段进行。真是没什么思路
zhaodalong 2010-06-18
  • 打赏
  • 举报
回复
没用过,帮顶
lxs512297816 2010-06-18
  • 打赏
  • 举报
回复
没办法 电信给的需求就是这。。。。。。。。。鄙视电信。。。。。。
  • 打赏
  • 举报
回复
我看错了,原来是600万数据啊....
  • 打赏
  • 举报
回复
数据库某一张表中可能会有300万的数据,我看到你代码中有starTime和endTime两个变量,这是不是数据查询时的一个时间段条件呢(如果我猜的没错的话),但是你如果将starTime和endTime作为查询数据的必须条件,我想查出来的数据会少很多....要导300万数据还真没尝试过....
lizhongyi188 2010-06-18
  • 打赏
  • 举报
回复
六百万 这么多啊 这样的问题到是没有遇到过

那么LZ你可以分段导出啊 ! 一百万一百万的导出去!
亲努力啊 2010-06-18
  • 打赏
  • 举报
回复
只能放到一个Sheet中吗?
neverloseming 2010-06-18
  • 打赏
  • 举报
回复
只写过导出小数据量的程序!!!!!!!
观望学习中!

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧