extjs4+jxl实现grid按条件查询导出到Excel

用Extjs4做导出到excel时如果直接用form表单提交或者直接用Ext.Ajax.request提交数据后,页面对后台HttpServletResponse回来的数据被封装成response.responseText。但是我们需要页面弹出保存地址的对话框,因此不能直接异步调用。我的实现如下:

1.在页面写一个“导出”按钮,数据可以按照日期条件进行导出

{
  iconCls: 'icon-export',
  xtype:'button',
  text : '导出',
  handler: function(){
    Ext.MessageBox.confirm("提示", "确认导出?", function(btn) {
        if (btn == "yes") {
            /*获取开始日期和结束日期*/
            var start_time =Ext.util.Format.date(( Ext.getCmp("date_start").getValue()), 'Y-m-d');
            var end_time = Ext.util.Format.date((Ext.getCmp("date_end").getValue()), 'Y-m-d');
            /*直接提示给用户是否保存或打开此文档*/
    				window.location.href ='/xxx/xxxx/xxxxxx.do?queryInfo=export&startTime='+start_time +'&endTime='+end_time;  
        }
    });
   }
}


2.后台jxl实现Excel导出功能

首先要在项目中引入jxl.jar包(可以点击转到这个页面下载http://download.csdn.net/detail/jingzizhu/4965670);按照日期查询条件将数据库查询结构放到一个list里面,再调用exportExcel方法

public void exportExcel(List<?> list, HttpServletRequest request, HttpServletResponse response) throws Exception { 

ServletOutputStream os = response.getOutputStream();

try{
	DateFormat format = new SimpleDateFormat("yyyyMMddHHmmssSSS");
	String timeFileName = format.format(new Date());

	response.reset();
	response.setCharacterEncoding("GB2312");
	response.setContentType("application/octet-stream");
	response.setHeader("Content-Disposition", "attachment; filename=" + timeFileName + "_sysLog.xls");
 
	// 创建工作薄
	WritableWorkbook wwb = Workbook.createWorkbook(os);

	// 创建工作表
	WritableSheet ws = wwb.createSheet("用户数据", 0);
	int row = 0, col = 0;
	// 第一行头部信息
	String[] head = new String[] { "用户名", "用户操作", "操作日期"};
	for (int i = 0; i < head.length; i++) {
		ws.addCell(new Label(col++, row, head[i]));
	}
	row++;

	for (int i = 0; i < list.size(); i++) {
		col = 0;
		Map<?, ?> str= (Map<?, ?>) list.get(i);
		ws.addCell(new Label(col++, row, str.get("user_name").toString()));
		ws.addCell(new Label(col++, row, str.get("user_operation").toString()));
		ws.addCell(new Label(col++, row, str.get("user_date").toString()));
		row++;
	}
	wwb.write();
	wwb.close();

  } catch (Exception e) {
	e.printStackTrace();
	throw new Exception("生成excel出错!");
  } finally {
	os.close();
  }
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值