1,在maven的pom文件中添加依赖
12 org.apache.poi 3poi-ooxml 4${poi.version} 5
2,在Controller中添加转发接口
1 @ResponseBody 2 @RequestMapping(value="exportExcel", method={RequestMethod.GET, RequestMethod.POST}) 3 public String exportExcel(HttpServletRequest request, String name, String data) { 4 JSONObject result = new JSONObject(); 5 result.put("code", 0); 6 result.put("msg", "success"); 7 try { 8 HSSFWorkbook workbook = new HSSFWorkbook(); 9 Method method = IExportExcelService.class.getDeclaredMethod(name + "Export", new Class[]{HSSFWorkbook.class, String.class});10 method.invoke(exportExcelService, workbook, data);11 String filename = name + GhFormatUtils.getFileDate() + ".xls";12 String realpath = request.getServletContext().getRealPath("/");13 String filepath = filedir + "/" + filename;14 FileOutputStream fos = new FileOutputStream(realpath + filepath);15 workbook.write(fos);16 fos.close();17 workbook.close();18 result.put("data", filepath);19 } catch (Exception e) {20 e.printStackTrace();21 result.put("code", -1);22 result.put("msg", e.getMessage());23 }24 return result.toString();25 }
3,在Service层编写相应生成格式的pdf
1 //公共函数 2 public void exportExcel(HSSFSheet sheet, String[] keys, JSONArray data) throws Exception { 3 sheet.setDefaultColumnWidth(15); 4 JSONObject head = (JSONObject)data.remove(0); 5 int lastRowNum = sheet.getLastRowNum(); 6 //创建标题行 7 HSSFRow headRow = sheet.createRow(++lastRowNum); 8 HSSFCellStyle headerStyle = sheet.getWorkbook().createCellStyle(); 9 headerStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);10 headerStyle.setFillForegroundColor(HSSFColor.GREY_25_PERCENT.index);11 headerStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);12 headerStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);13 headerStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);14 headerStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);15 for(int i = 0; i < keys.length; i++) {16 HSSFCell cell = headRow.createCell(i);17 cell.setCellValue(head.getString(keys[i]));18 cell.setCellStyle(headerStyle);19 }20 HSSFCellStyle dataStyle = sheet.getWorkbook().createCellStyle();21 dataStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);22 dataStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);23 dataStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);24 dataStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);25 //创建数据明细行26 for(int i = 0; i < data.size(); i++) {27 HSSFRow row = sheet.createRow(++lastRowNum);28 JSONObject rowData = data.getJSONObject(i);29 for(int j = 0; j < keys.length; j++) {30 HSSFCell cell = row.createCell(j);31 cell.setCellValue(rowData.getString(keys[j]));32 cell.setCellStyle(dataStyle);33 }34 }35 }36 //具体处理函数37 @Override38 public void offerExport(HSSFWorkbook workbook, String dataStr) throws Exception {39 JSONObject data = JSONObject.parseObject(dataStr);40 JSONArray detail = data.getJSONArray("detail");41 Mapdict = basMgmtService.getDictMap("col1");42 //数据处理,用数据字典翻译数据43 for(int i = 0; i < detail.size(); i++) {44 JSONObject obj = detail.getJSONObject(i);45 obj.put("col1", dict.get(obj.getString("col1")));46 }47 JSONObject head = new JSONObject();48 String keys[] = {"col1","col2"};49 head.putAll(new HashMap (){ {50 put(keys[0], "第一列名称");51 put(keys[1], "第二列名称");52 //......53 }});54 detail.add(0, head);55 //创建工作页56 HSSFSheet sheet = workbook.createSheet(data.getString("titleName"));57 //创建表头标题58 sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, keys.length - 1));59 HSSFRow titleRow = sheet.createRow(0);60 HSSFCell titleCell = titleRow.createCell(0);61 titleCell.setCellValue(data.getString("titleName"));62 HSSFCellStyle titleStyle = workbook.createCellStyle();63 titleStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);64 titleCell.setCellStyle(titleStyle);65 exportExcel(sheet, keys, detail);66 }
4,前端请求
1 //公共导出Excel 2 function commExcel(url, name, data, appPath) { 3 $.ajax({ 4 url : url, 5 type : 'post', 6 dataType : "json", 7 data : { 8 name : name, 9 data : JSON.stringify(data)10 },11 async : true,12 success : function(result,status,xhr) {13 if(result.code == 0) {14 $("")[0].click();15 } else {16 var msg = result.msg;17 if(!msg) {18 msg = "请求失败,请手动刷新页面!";19 }20 top.layer.alert(msg);21 }22 },23 error : function(xhr,status,err) {24 top.layer.alert(err);25 }26 });27 }28 //页面导出Excel29 function exportExcel() {30 var url = "${adminPath}/finance/export/exportExcel";31 var data = {32 titleName : "excel名称",33 customerName: "用户名称",34 detail : detail35 };36 commExcel(url, "offer", data, "${appPath}");37 }