Extjs导出excel数据

环境:前台:Extjs;后台hibernate+struct

需求:前台查询结果分页显示,导出到excel时需要导出所有符合查询调节的记录。

前台:

	var panel = Ext.getCmp('qRINFPanel');
	var form = panel.getForm();
	var params = grid.getStore().baseParams;
	params['filename']='projects.xls';
	params['q_pDomain'] = getAgentDomain();
	form.standardSubmit=true;
	var paramstr='';
	for(var s in params){
		paramstr+=s+"="+params[s]+"&";
	}
	var reg=new RegExp('undefined','g'); //创建正则RegExp对象  
	paramstr=paramstr.replace(reg,'');  //去掉未赋值的参数默认值
	form.url='exportProjects.action?'+paramstr;
	form.method='POST';
	form.submit();

qRINFPanel为panel的id,params里面还有其他参数,这个是存储前台查询用的参数对象。

前台将查询参数转换为json格式放在url中(不要用Extjs.encode方法,很坑,后台request.getParameter获取不到),后台拿到查询参数后,从数据库查询记录,然后生成excel,以流的形式输出到前台下载即可。

后台代码:

	public void exportProjects() {
		boolean status = false;
		String rtnMsg = "项目信息导出失败";
		ServletOutputStream os = null;
		System.out.println("导出检索到的项目信息");

		fileName = request.getParameter("filename");
		List projectList = getProjects("", "");
		try {
			response.reset();
			response.setContentType("application/msexcel;charset=UTF-8");
			response.setCharacterEncoding("UTF-8");

			response.addHeader("Content-Disposition", "attachment;filename=\""
					+ new String(fileName.getBytes("UTF-8"), "ISO8859_1")
					+ "\"");
			os = response.getOutputStream();

			// 判断格式
			String type = getPostfix(fileName);
			System.out.println(type);
			if (type.equals("")) {
				status = false;
				rtnMsg = "未知的文件格式";
			} else if (type.equalsIgnoreCase("xls")) {
				writeXLS(os, projectList);
				status = true;
				rtnMsg = "项目信息导出成功";
				os.flush();
				os.close();
				// rtnMsg=file.getAbsolutePath().replace("\\", "/");
			} else if (type.equalsIgnoreCase("xlsx")) {
				writeXLSX(os, projectList);
				status = true;
				rtnMsg = "项目信息导出成功";
				os.flush();
				os.close();
			} else {
				status = false;
				rtnMsg = "不支持的文件格式:" + type;
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
			status = false;
			rtnMsg = "服务器文件不存在,请联系管理员";
		} catch (IOException e) {
			e.printStackTrace();
			status = false;
			rtnMsg = "服务器文件操作IO异常,请联系管理员";
		} catch (NullPointerException e) {
			e.printStackTrace();
			status = false;
			rtnMsg = "空指针异常,请联系管理员";
		}

		/**
		 * 获取操作结果
		 */
		String result = "{success:" + status + ",rtnMsg:'" + rtnMsg + "'}";
		System.out.println(result);
	}

其中, getProjects( "" , "" )  方法是从request中取参数进行查询,返回List数组


你可能感兴趣的:(Java,Javascript)