经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » Spring » 查看文章
后台生成excel前端下载
来源:cnblogs  作者:huangyuxiang  时间:2018/11/6 10:13:25  对本文有异议

 

后台生成Excel时前端获取下载

Controller控制器:

  1. package com.example.test.controller;
  2. import com.example.test.common.HttpRequest;
  3. import com.example.test.utils.ExcelUtil;
  4. import net.sf.json.JSONArray;
  5. import net.sf.json.JSONObject;
  6. import org.apache.poi.hssf.usermodel.HSSFWorkbook;
  7. import org.springframework.stereotype.Controller;
  8. import org.springframework.web.bind.annotation.RequestMapping;
  9. import org.springframework.web.bind.annotation.ResponseBody;
  10. import javax.servlet.http.HttpServletRequest;
  11. import javax.servlet.http.HttpServletResponse;
  12. import java.io.OutputStream;
  13. import java.io.UnsupportedEncodingException;
  14. import java.util.List;
  15. @Controller
  16. @RequestMapping(value = "/report")
  17. public class TestController {
  18. public HttpRequest hr = new HttpRequest();
  19. /**
  20. * 导出Excel
  21. */
  22. @RequestMapping(value = "/excel", produces = "application/json; charset=utf-8")
  23. @ResponseBody
  24. public void findExcel(HttpServletRequest request,HttpServletResponse response) {
  25. String startTime = request.getParameter("startTime");
  26. startTime = startTime+" 00:00:00";
  27. String endTime = request.getParameter("endTime");
  28. endTime = endTime+" 00:00:00";
  29. String param = "startTime="+startTime+"&endTime="+endTime;
  30. String baseURL = "http://localhost:8080";
  31. String res = hr.sendPost(baseURL+"/getFinancingStat", param);
  32. System.out.println(res);
  33. List<JSONObject> list = JSONArray.fromObject(res);
  34. //excel标题
  35. String[] title = {"业务员姓名","单量","业务员电话","业务员id"};
  36. //excel文件名
  37. String fileName = "业务员数据"+startTime+"至"+endTime+".xls";
  38. //sheet名
  39. String sheetName = "业务员数据";
  40. String[][] content=new String[list.size()][title.length];
  41. for (int i = 0; i < list.size(); i++) {
  42. content[i] = new String[title.length];
  43. JSONObject obj=list.get(i);
  44. content[i][0] = obj.get("业务员姓名").toString();
  45. content[i][1] = obj.get("单量").toString();
  46. content[i][2] = obj.get("业务员电话").toString();
  47. content[i][3] = obj.get("业务员id").toString();
  48. }
  49. //创建HSSFWorkbook
  50. HSSFWorkbook wb = ExcelUtil.getHSSFWorkbook(sheetName, title, content, null);
  51. //响应到客户端
  52. try {
  53. this.setResponseHeader(response, fileName);
  54. OutputStream os = response.getOutputStream();
  55. wb.write(os);
  56. os.flush();
  57. os.close();
  58. } catch (Exception e) {
  59. e.printStackTrace();
  60. }
  61. }
  62. //发送响应流方法
  63. public void setResponseHeader(HttpServletResponse response, String fileName) {
  64. try {
  65. try {
  66. fileName = new String(fileName.getBytes(),"ISO8859-1");
  67. } catch (UnsupportedEncodingException e) {
  68. // TODO Auto-generated catch block
  69. e.printStackTrace();
  70. }
  71. response.setContentType("application/octet-stream;charset=ISO8859-1");
  72. response.setHeader("Content-Disposition", "attachment;filename="+ fileName);
  73. response.addHeader("Pargam", "no-cache");
  74. response.addHeader("Cache-Control", "no-cache");
  75. } catch (Exception ex) {
  76. ex.printStackTrace();
  77. }
  78. }
  79. }

ExcelUtil生成Excel的样式:

  1. package com.example.test.utils;
  2. import org.apache.poi.hssf.usermodel.HSSFCell;
  3. import org.apache.poi.hssf.usermodel.HSSFCellStyle;
  4. import org.apache.poi.hssf.usermodel.HSSFRow;
  5. import org.apache.poi.hssf.usermodel.HSSFSheet;
  6. import org.apache.poi.hssf.usermodel.HSSFWorkbook;
  7. public class ExcelUtil {
  8. /**
  9. * 导出Excel
  10. * @param sheetName sheet名称
  11. * @param title 标题
  12. * @param values 内容
  13. * @param wb HSSFWorkbook对象
  14. * @return
  15. */
  16. public static HSSFWorkbook getHSSFWorkbook(String sheetName, String []title, String [][]values, HSSFWorkbook wb){
  17. // 第一步,创建一个HSSFWorkbook,对应一个Excel文件
  18. if(wb == null){
  19. wb = new HSSFWorkbook();
  20. }
  21. // 第二步,在workbook中添加一个sheet,对应Excel文件中的sheet
  22. HSSFSheet sheet = wb.createSheet(sheetName);
  23. // 第三步,在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制
  24. HSSFRow row = sheet.createRow(0);
  25. // 第四步,创建单元格,并设置值表头 设置表头居中
  26. HSSFCellStyle style = wb.createCellStyle();
  27. style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 创建一个居中格式
  28. //声明列对象
  29. HSSFCell cell = null;
  30. //创建标题
  31. for(int i=0;i<title.length;i++){
  32. cell = row.createCell(i);
  33. cell.setCellValue(title[i]);
  34. cell.setCellStyle(style);
  35. }
  36. //创建内容
  37. for(int i=0;i<values.length;i++){
  38. row = sheet.createRow(i + 1);
  39. for(int j=0;j<values[i].length;j++){
  40. //将内容按顺序赋给对应的列对象
  41. row.createCell(j).setCellValue(values[i][j]);
  42. }
  43. }
  44. return wb;
  45. }
  46. }

前端页面:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Title</title>
  6. <script type="text/javascript" src="../js/jquery.js"></script>
  7. </head>
  8. <body>
  9. 开始时间:<input class="form-control" type="date" id="startTime" /><br/><br/>
  10. 结束时间:<input class="form-control" type="date" id="endTime" /><br/><br/>
  11. <button id="js-export" type="button" class="btn btn-primary">导出Excel</button>
  12. </body>
  13. <script>
  14. $('#js-export').click(function(){
  15. var startTime = document.getElementById("startTime").value;
  16. var endTime = document.getElementById("endTime").value;
  17. window.location.href="/report/excel?startTime="+startTime+"&endTime="+endTime+"";
  18. });
  19. </script>
  20. </html>

maven中的配置:

  1.     <dependency>
  2. <groupId>org.apache.poi</groupId>
  3. <artifactId>poi</artifactId>
  4. <version>3.6</version>
  5. </dependency>
  6. <!-- https://mvnrepository.com/artifact/org.apache.poi/poi-examples -->
  7. <dependency>
  8. <groupId>org.apache.poi</groupId>
  9. <artifactId>poi-examples</artifactId>
  10. <version>3.6</version>
  11. </dependency>
  12. <!-- https://mvnrepository.com/artifact/org.apache.poi/poi-excelant -->
  13. <dependency>
  14. <groupId>org.apache.poi</groupId>
  15. <artifactId>poi-excelant</artifactId>
  16. <version>3.11</version>
  17. </dependency>
  18. <!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml -->
  19. <dependency>
  20. <groupId>org.apache.poi</groupId>
  21. <artifactId>poi-ooxml</artifactId>
  22. <version>3.6</version>
  23. </dependency>
  24. <!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml-schemas -->
  25. <dependency>
  26. <groupId>org.apache.poi</groupId>
  27. <artifactId>poi-ooxml-schemas</artifactId>
  28. <version>3.6</version>
  29. </dependency>
  30. <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
  31. <dependency>
  32. <groupId>mysql</groupId>
  33. <artifactId>mysql-connector-java</artifactId>
  34. <version>5.1.21</version>
  35. </dependency>
  36. <dependency>
  37. <groupId>net.sf.json-lib</groupId>
  38. <artifactId>json-lib</artifactId>
  39. <version>2.4</version>
  40. <classifier>jdk15</classifier>
  41. </dependency>

 

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号