在做完报表和后台展示后,前辈让我做一下将数据导出到本地即:点击导出跳转浏览器下载excel文件到本地。
String startTime = getParam("startTime"); String endTime = getParam("endTime");
//先设置下载后的文件名 String fileName = "xxxxx" + now() + ".xlsx"; //根据筛选项 获取办理明细表所需要的数据 QueryWrapper<H5XrdlbReport> queryWrapper = new QueryWrapper<>(); if (StrUtil.isNotBlank(startTime) && StrUtil.isNotBlank(endTime)){ queryWrapper.ge("date",startTime).le("date",endTime); } queryWrapper.orderByDesc("date"); // 按时间降序排列 List<H5XrdlbReport> data =h5XrdlbService.list(queryWrapper); //设置响应类型为excel response.setContentType("application/vnd.ms-excel;charset=utf-8"); //告诉浏览器下载这个附件 response.setHeader("Access-Control-Allow-Origin", "*"); response.setHeader("Content-Disposition", "attachment;filename=" + new String(fileName.getBytes("utf-8"), "ISO-8859-1")); //7列数据 String[] titles = {"日期", "渠道", "标识码", "当日访问量", "当月访问量","当日访问人数","当月访问人数"}; //sheet中数据 封装 String[][] values = new String[data.size()][7]; for (int i = 0; i < data.size(); i++) { values[i][0] = String.valueOf(data.get(i).getDate()); //日期 values[i][1] = String.valueOf(data.get(i).getFromAppType()); // 渠道 values[i][2] = String.valueOf(data.get(i).getChannel()); // 分类 values[i][3] = String.valueOf(data.get(i).getDvn()); // 当日访问量 values[i][4] = String.valueOf(data.get(i).getMvn()); // 当月访问量 values[i][5] = String.valueOf(data.get(i).getDvnd()); // 当日访问人数 values[i][6] = String.valueOf(data.get(i).getMvnd()); // 当月访问人数 } //输出excel文件 SXSSFWorkbook workbook = ExcelUtil.getHSSFWorkbook("xxxxxxxxxxxx", titles, values, new SXSSFWorkbook()); ServletOutputStream outputStream = null; try { //将Excel写入到响应流中 outputStream = response.getOutputStream(); workbook.write(outputStream); //强制推送缓存到响应流中 outputStream.flush(); //关闭响应流 outputStream.close(); saveOperateLog("xxxxxx", "xxxxxxxxxxxx"); //关闭Excel工作簿 workbook.close(); return toJson(R.me().ok()); } catch (IOException e) { e.printStackTrace(); return toJson(R.me().fail("导出失败")); } }