POI之Excel导出

1,在maven的pom文件中添加依赖

1 <dependency>
2     <groupId>org.apache.poi</groupId>
3     <artifactId>poi-ooxml</artifactId>
4     <version>${poi.version}</version>
5 </dependency>

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 @Override
38 public void offerExport(HSSFWorkbook workbook, String dataStr) throws Exception {
39     JSONObject data = JSONObject.parseObject(dataStr);
40     JSONArray detail = data.getJSONArray("detail");
41     Map<String, String> dict = 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<String, String>(){{
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                 $("<a href=" + appPath + result.data + " />")[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 //页面导出Excel
29 function exportExcel() {
30     var url = "${adminPath}/finance/export/exportExcel";
31     var data = {
32         titleName : "excel名称",
33         customerName: "用户名称",
34         detail : detail
35     };
36     commExcel(url, "offer", data, "${appPath}");
37 }

猜你喜欢

转载自www.cnblogs.com/guanghe/p/9999739.html