html代码
<body class="w hauto filter2 f14"> <form id="searchForm" action="../../dataCompared/export.do" method="post"> <input type="hidden" name="tableTitle" id="tableTitle"/> <input type="hidden" name="tableData" id="tableData"/> <div class="ml30 mt10 mb20"> <span class="fl mr10">1、选择考核内容</span> <span class="fl mr10" id="checkContentCount" style="color: blue;"></span> <span class="btn2" id="selectBtn">点击选择</span> </div> <div class="ml30 mt10 mb20 h25"> <span class="fl mr10">2、添加对比市县</span> <span class="fl"><input type="text" id="county" placeholder="最多可以选择30个县对比数据"></span> <span class="fl ml10"><span class="btn2" id="submitBtn">提交</span></span> <span class="fl ml10"><span class="btn2" id="exportBtn">表格导出</span></span> </div> <table border="0" class="authentication_info" style="margin-bottom: 20px" cellpadding="0" cellspacing="1"> <col style=" 100px"/> <col style=" 20px" id="colFlag"/> <thead id="tableHead"> </thead> <tbody id="test"></tbody> </table> </form> </body>
java代码
/** * 导出 */ @RequestMapping("/export") @SuppressWarnings({"unchecked", "rawtypes"}) public void export(@RequestParam Map map, HttpServletRequest request, HttpServletResponse response) { response.setContentType("application/json;charset=utf-8"); String title = request.getParameter("tableTitle"); String data = request.getParameter("tableData"); JSONArray json = JSONArray.fromObject(data); List<Object> list= (List<Object>)JSONArray.toCollection(json, Object.class); // 生成文件名称 String filename = "安全县创建实际完成量数据对比" + ".xls"; // 获取导出信息列表 Workbook book = new HSSFWorkbook(); ServletOutputStream outputStream = null; try { // 创建第一个sheet页 Sheet sheet = book.createSheet("数据对比"); // 生成第一行 Row row = sheet.createRow(0); // String biaoti = "安全县创建实际完成量数据对比"; String[] d = new String[20]; d = title.split("@"); row.createCell(0).setCellValue("区县|实际完成量|考核内容"); for (int i = 1; i < d.length+1; i++) { row.createCell(i).setCellValue(d[i-1]); } sheet.setColumnWidth(0, 8 * 2 * 512); // 生成第二行之后的内容 int i = 1; for (Object object : list) { List listData = (List) object; // 创建一行 Row row2 = sheet.createRow(i++); for (int j=0; j<listData.size(); j++){ row2.createCell(j).setCellValue(listData.get(j)+""); } } response.setContentType("application/OCTET-STREAM;charset=UTF-8"); response.setHeader("Content-Disposition", "attachment;filename=" + new String(filename.getBytes("gb2312"), "ISO8859-1")); response.setCharacterEncoding("UTF-8"); ByteArrayOutputStream outPut = new ByteArrayOutputStream(); book.write(outPut); byte[] b = outPut.toByteArray(); ByteArrayInputStream inputStream = new ByteArrayInputStream(b); outputStream = response.getOutputStream(); int bytesRead = 0; // 用输出流去写,缓冲输入输出流 byte[] buffer = new byte[8192]; while ((bytesRead = inputStream.read(buffer, 0, 8192)) != -1) { outputStream.write(buffer, 0, bytesRead); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { try { outputStream.close(); } catch (IOException e) { e.printStackTrace(); } } }
注意:导出Excel表格的请求要放在form表单的action中,尝试用ajax请求失败