JAVA项目后台查询的数据生成Excel表格并提供给用户下载
2016-08-24 11:13
706 查看
最近需求:把Hive语句查询出来的数据在生成Excel,并提供给用户下载
想了2方案,第一种自然就是用js,但是有个问题,浏览器需要安装插件
第二种方法就是在后台生成文件,存放到服务器里,通过数据集来把数据塞到文件里,后缀名为.xls,这种方法明显靠谱得多嘛
第一步:JSP页面添加一个按钮,给个URL能跳转到相应的Controller的方法里
第二步:在Controller里新加方法,用于查询数据
return一个 new ModelAndView,事实上new的事HiveAdminStatDateExportExcelView(),我把参数model给他,model里存了数据集、文件名、表头名
那么HiveAdminStatDateExportExcelView()是什么呢,他其实是个类,是excel文件的生成策略
完成以上步骤,就实现了excel表格后台生成,前台获取的功能了!
点击导出数据:
下载成功,打开看看:
OK。
想了2方案,第一种自然就是用js,但是有个问题,浏览器需要安装插件
第二种方法就是在后台生成文件,存放到服务器里,通过数据集来把数据塞到文件里,后缀名为.xls,这种方法明显靠谱得多嘛
第一步:JSP页面添加一个按钮,给个URL能跳转到相应的Controller的方法里
"<a href=\"/hiveadmin/exportExcel.do?id="+haJob.getId()+"&jobType="+ haJob.getJobType()+"&jobName="+ haJob.getJobName() + " \" title='导出数据'>导出数据</a>"传了三个参数 ,id,name,type,id用于后面查找到底是哪个数据(因为查询出来的数据我先保存为txt文件,这个txt文件带有固定编号,id用于定位txt文件),name就是生成的excel的名字,jobType用来获取excel表格表头的名字(这些表头名称存放在一个单独的表中)
第二步:在Controller里新加方法,用于查询数据
@RequestMapping(value = "/exportExcel") public ModelAndView exportExcel(HttpServletRequest request, HttpServletResponse response, ModelMap model) { List<Map<String, Object>> rowlst = new ArrayList<Map<String, Object>>(); String jobId = request.getParameter("id"); String jobType = request.getParameter("jobType") ; String jobName = request.getParameter("jobName") ; // 读取数据文本内容 File file = new File(HiveAdminJobConstants.JOB_WORK_DATA_DIR + "/data-" + jobId + ".txt"); BufferedReader reader = null; try { reader = new BufferedReader(new FileReader(file)); String line = null; int n = 0; // 一次读入一行,直到读入null为文件结束 while ((line = reader.readLine()) != null) { String[] arryLine = line.split(","); Map<String, Object> map = new HashMap<String, Object>(); for (int i = 0; i < arryLine.length; i++) { map.put(String.valueOf(i), arryLine[i]); } rowlst.add(map); } } catch (IOException e) { e.printStackTrace(); } finally { if (reader != null) { try { reader.close(); } catch (IOException e1) { } } } if(jobName == null){ jobName = "未命名" ; } //获取表头 HiveAdminJobTemplate template = hiveAdminJobTemplateService.getHiveAdminJobTemplateByUid(jobType); List<String> colTitleList = new ArrayList<String>(); if (template != null) { String strListTitle = template.getShowListTitle(); String[] arryListTitle = strListTitle.split(","); for (int i = 0; i < arryListTitle.length; i++) { colTitleList.add(arryListTitle[i]); } } model.put("colTitleList", colTitleList) ; model.put("exclName", jobName) ; model.put("list", rowlst) ; return new ModelAndView(new HiveAdminStatDateExportExcelView(), model); }注意上面的方法的返回值类型:ModelAndView,不是String
return一个 new ModelAndView,事实上new的事HiveAdminStatDateExportExcelView(),我把参数model给他,model里存了数据集、文件名、表头名
那么HiveAdminStatDateExportExcelView()是什么呢,他其实是个类,是excel文件的生成策略
/** * 生成excel视图,可用excel工具打开或者保存 由ViewController的return new ModelAndView(viewExcel, * model)生成 */ public class HiveAdminStatDateExportExcelView extends AbstractExcelView { @SuppressWarnings("unchecked") public void buildExcelDocument(Map model, HSSFWorkbook workbook, HttpServletRequest request, HttpServletResponse response) throws Exception { // 设置文件名称 String jobName = model.get("exclName").toString() ; String excelName = jobName+".xls"; // 设置sheet名称 String sheetName = jobName; // 设置response方式,使执行此controller时候自动出现下载页面,而非直接使用excel打开 response.setContentType("APPLICATION/OCTET-STREAM"); response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(excelName, "UTF-8")); // Excel表头 HSSFSheet sheet = workbook.createSheet(sheetName); // 产生标题列 List<String> headerNamesList = new ArrayList<String>() ; headerNamesList = (List<String>) model.get("colTitleList") ; String[] headerNames = new String[headerNamesList.size()] ; for(int i=0; i<headerNamesList.size(); i++){ headerNames[i] = headerNamesList.get(i) ; } SpringExcelUtil excelUtil = new SpringExcelUtil(); excelUtil.setHeader(sheet, headerNames); // HSSFCellStyle cellStyle = workbook.createCellStyle(); cellStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("mm/dd/yyyy")); // 填充数据 List<Map<String, Object>> stuList = (List<Map<String, Object>>) model.get("list"); for (Map<String, Object> map : stuList) { if (map != null) { String[] data = new String[map.size()]; for(int j=0; j<map.size(); j++){ data[j] = String.valueOf(map.get(String.valueOf(j))) ; } excelUtil.addRecord(sheet, data); } } } }
完成以上步骤,就实现了excel表格后台生成,前台获取的功能了!
点击导出数据:
下载成功,打开看看:
OK。
相关文章推荐
- [置顶] java后台利用模板生成Word文档提供前台下载
- [置顶] java后台利用Apache poi 生成excel文档提供前台下载
- 【Java框架型项目从入门到装逼】第十一节 用户新增之把数据传递到后台
- java后台利用Apache poi 生成excel文档提供前台下载示例
- 前端数据传到后台动态生成Excel文件并提供文件下载
- java文件中数据导出生成Excel表格
- 导出查询数据生成EXCEL文件并下载
- php生成csv文件提供给用户下载
- java生成excel表格和pdf并实现下载弹出框
- 关于java项目操作优化查询数据
- 【java】itoo项目实战之大数据查询之使用 new map 优化hibernate之级联查询
- 导出(下载)数据库查询的数据生成csv文件
- 完成用户数据的导出,生成文本文件Users.txt,实现点击按钮自动下载
- jsp页面导出用jxl方式导出数据到excel表格并下载保存(第二种直接用java类实现)
- java 动态生成多个excel文件打成zip包供用户下载
- 【java】itoo项目实战之百万数据查询优化收集与实践
- 【学习笔记二】struts2的动态下载,使用Apache PoI生成excel表格,将用户信息以xls文件格式供用户下载
- 数据导出文件生成并下载 java
- Java ssh poi 根据条件查询数据导出excel到浏览器 下载框不显示 浏览器乱码 之前是用submit()
- 利用百度车联网提供的天气查询接口用python查询天气信息以及安卓(Java)利用gson解析数据