zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    Flesch Reading Ease (poj 3371)
    保留道路
    列车调度
    三角形
    高精度加法
    AC自动机(1)
    线段树
    并查集(3)
    并查集(2)
    并查集
  • 原文地址:https://www.cnblogs.com/guanghe/p/9999739.html
Copyright © 2011-2022 走看看