有一个关于导出excel的问题
//js 代码 var form = $("<form>");//定义一个form表单 form.attr('style', 'display:none');//设置为不展示 form.attr('target', ''); form.attr('method', 'post'); form.attr('action', url);//url为后台请求的地址 //参数以input的方式 放入form中 params :{key:value} for(var key in params){ form.append( "<input type='hidden' name='" + key + "' value='" + params[key] + "' />" ); } $('body').append(form);//将表单放置在web中 form.submit();//表单提交 form.remove();//下载完成之后 删除form 后台代码就不赘述了 不过有一点 String fileName = "测试"; fileName=URLEncoder.encode(fileName,"UTF-8"); response.setHeader("Content-disposition", "attachment;filename="+new String(fileName.getBytes("UTF-8"),"iso-8859-1")+".xls"); //有一些浏览器下载的时候会出现文件名称会出现乱码情况 //可以先把fileName编码 然后再getBytes 再转换成iso-8859-1 //这样就可以解决乱码 当然可能还会出现其他乱码 那我暂时没遇到~
下边是一个excel简单导出的util类 可能存在很多不足 但是基本的应用倒是没问题
/** 这是一个excel简单导出的util类 * Created by Lm */ public class ExportMapExcel { /** * * @param title sheet页名称 * @param headersName 表格头名称 * @param headersId 表格头对应数据中Map的key * @param dtoList 数据 * @param fileName 导出文件名称 * @param response */ @SuppressWarnings({ "rawtypes", "unchecked" }) public void exportExcel(String title, List<String> headersName, List<String> headersId, List<Map<String, Object>> dtoList,String fileName,HttpServletResponse response) { /* (一)表头--标题栏 */ Map<Integer, String> headersNameMap = new HashMap<Integer, String>(); int key = 0; for (int i = 0; i < headersName.size(); i++) { if (!headersName.get(i).equals(null)) { headersNameMap.put(key, headersName.get(i)); key++; } } /* (二)字段---标题的字段 */ Map<Integer, String> titleFieldMap = new HashMap<Integer, String>(); int value = 0; for (int i = 0; i < headersId.size(); i++) { if (!headersId.get(i).equals(null)) { titleFieldMap.put(value, headersId.get(i)); value++; } } /* (三)声明一个工作薄:包括构建工作簿、表格、样式 */ HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet = wb.createSheet(title); sheet.setDefaultColumnWidth(15); // 生成一个样式 HSSFCellStyle style = wb.createCellStyle(); HSSFRow row = sheet.createRow(0); style.setAlignment(HSSFCellStyle.ALIGN_CENTER); HSSFCell cell; Collection c = headersNameMap.values();//拿到表格所有标题的value的集合 Iterator<String> headersNameIt = c.iterator();//表格标题的迭代器 /* (四)导出数据:包括导出标题栏以及内容栏 */ //根据选择的字段生成表头--标题 int size = 0; while (headersNameIt.hasNext()) { cell = row.createCell(size); cell.setCellValue(headersNameIt.next().toString()); cell.setCellStyle(style); size++; } //表格一行的字段的集合,以便拿到迭代器 Collection zdC = titleFieldMap.values(); Iterator<Map<String, Object>> titleFieldIt = dtoList.iterator();//总记录的迭代器 int zdRow = 1;//真正的数据记录的列序号 while (titleFieldIt.hasNext()) {//记录的迭代器,遍历总记录 Map<String, Object> mapTemp = titleFieldIt.next();//拿到一条记录 row = sheet.createRow(zdRow); zdRow++; int zdCell = 0; Iterator<String> zdIt = zdC.iterator();//一条记录的字段的集合的迭代器 while (zdIt.hasNext()) { String tempField =zdIt.next();//字段的暂存 if (mapTemp.get(tempField) != null) { Object valueObj = mapTemp.get(tempField); boolean isNum = false; if(valueObj != null && !"".equals(valueObj)){ isNum = valueObj.toString().matches("^(-?\\d+)(\\.\\d+)?$"); } if(isNum){//数字 row.createCell(zdCell).setCellValue(Double.valueOf(StrUtil.ObjToStr(mapTemp.get(tempField))));//写进excel对象 }else{ row.createCell(zdCell).setCellValue(String.valueOf(mapTemp.get(tempField)));//写进excel对象 } zdCell++; } } } try { response.setContentType("application/vnd.ms-excel;charset=UTF-8"); response.setCharacterEncoding("utf-8"); fileName=URLEncoder.encode(fileName,"UTF-8"); response.setHeader("Content-disposition", "attachment;filename="+new String(fileName.getBytes("UTF-8"),"iso-8859-1")+".xls"); OutputStream out = response.getOutputStream(); wb.write(out); out.flush(); out.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }