Springboot利用poi导出excel下载

因为项目中之前的做法是用反射获取属性,所以demo中也是用的反射,我看网上很多文章都是存入一个List中,不知道这两种哪种更何合适一点,或者有什么更好的方法也请大佬们赐教。

pom

<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.13</version>
</dependency>
<dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.13</version>
</dependency>
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional>
</dependency>

Service

import org.springframework.stereotype.Service;import java.util.ArrayList;
import java.util.List;
@Service
public class StudentService {public List<Student> getList(Student student, int index, int size) {Student student1 = new Student("张三", 90, 18);Student student2 = new Student("李四", 85, 17);Student student3 = new Student("王五", 70, 19);List<Student> list = new ArrayList<>();list.add(student1);list.add(student2);list.add(student3);return list;}
}

Controller

import lombok.Cleanup;
import org.apache.poi.ss.usermodel.Workbook;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.List;@RestController
public class StudentController {@Autowiredpublic StudentService studentService;@RequestMapping("/exportStudentExcel")public ResponseEntity<byte[]> exportExcel(Student student) {List<Student> list = studentService.getList(student, 0, 10); // 每次只需要改这几行String fileName = "学生成绩统计表"; // 每次只需要改这几行String[] getters = {"getName", "getScore", "getAge"}; // 每次只需要改这几行String[] headers = {"姓名", "分数", "年龄"}; // 每次只需要改这几行Workbook wb = ExcelUtils.createWorkBook(list, getters, headers,student.getClass()); // 每次只需要改这几行@Cleanup ByteArrayOutputStream os = new ByteArrayOutputStream();try {wb.write(os);} catch (IOException e) {e.printStackTrace();}byte[] content = os.toByteArray();HttpHeaders httpHeaders = new HttpHeaders();try {fileName = URLEncoder.encode(fileName, "UTF-8");} catch (UnsupportedEncodingException e) {e.printStackTrace();}httpHeaders.setContentDispositionFormData("attachment", fileName + ".xlsx");return new ResponseEntity<byte[]>(content, httpHeaders, HttpStatus.OK);}
}

ExcelUtils

public class ExcelUtils {/*** 创建excel文档** @param getters list中map的key数组集合* @param headers excel的列名*/public static Workbook createWorkBook(List list, String[] getters, String[] headers, Class clazz) {List<Method> methods = getMethodsByStrs(getters, clazz);// 创建.xlsx工作簿Workbook wb = new XSSFWorkbook();// 创建第一个sheet(页),并命名Sheet sheet = wb.createSheet("sheet1");// 手动设置列宽.第一个参数表示要为第几列设,第二个参数表示列的宽度,n为列高的像素数.for (int i = 0; i < getters.length; i++) {sheet.setColumnWidth((short) i, (short) (35.7 * 200));}// 创建第一行Row header = sheet.createRow(0);// 创建两种单元格格式CellStyle cellStyle1 = wb.createCellStyle();CellStyle cellStyle2 = wb.createCellStyle();// 创建两种字体Font font1 = wb.createFont(); // 标题字体Font font2 = wb.createFont(); // 正文字体// 标题加粗font1.setBoldweight(Font.BOLDWEIGHT_BOLD);// 设置两种单元格的样式setCellStype(cellStyle1, font1);setCellStype(cellStyle2, font2);//设置headerfor (int i = 0; i < headers.length; i++) {Cell cell = header.createCell(i);cell.setCellValue(headers[i]);cell.setCellStyle(cellStyle1);}//设置dataint headersNum = 1;for (int i = 0; i < list.size(); i++) {Row row = sheet.createRow(i + headersNum);for (int j = 0; j < methods.size(); j++) {try {Object invoke = methods.get(j).invoke(list.get(i));if (invoke != null) {row.createCell(j).setCellValue(invoke.toString());}} catch (Exception e) {e.printStackTrace();}}}return wb;}private static void setCellStype(CellStyle cellStyle, Font font) {font.setFontHeightInPoints((short) 10);font.setColor(IndexedColors.BLACK.getIndex());cellStyle.setFont(font);cellStyle.setBorderLeft(CellStyle.BORDER_THIN);cellStyle.setBorderRight(CellStyle.BORDER_THIN);cellStyle.setBorderTop(CellStyle.BORDER_THIN);cellStyle.setBorderBottom(CellStyle.BORDER_THIN);cellStyle.setAlignment(CellStyle.ALIGN_CENTER);}private static List<Method> getMethodsByStrs(String[] getters, Class clazz) {List<Method> list = new ArrayList<>();for (String getter : getters) {try {list.add(clazz.getDeclaredMethod(getter));} catch (NoSuchMethodException e) {e.printStackTrace();}}return list;}
}

转载于:https://www.cnblogs.com/n031/p/11119764.html

Springboot利用poi导出excel下载相关推荐

  1. Springboot整合Poi导出excel(简单版)

    一. 问题引入 博客专栏: Springboot整合Poi导出excel(简单版) Springboot整合Poi导出excel(注解版) 总所周知Springboot是一个功能强大的微服务框架,集成 ...

  2. java利用poi导出excel功能-附带图片导出

    java利用poi导出excel功能-附带图片导出 写在前面 最近刚离职,闲来无事,于是把上两家公司都有碰到过的需求但都没有去研究实现:即导出带图片的excel报表.于是就折腾了一下这个功能,研究出来 ...

  3. Springboot整合Poi导出excel(注解版)

    简介 博客专栏: Springboot整合Poi导出excel(简单版) Springboot整合Poi导出excel(注解版) 上文提到通过poi简单导出Excel后,很多读者反应需要解决导出自适应 ...

  4. java导出excel 客户端_Java poi导出Excel下载到客户端

    Java poi 导出Excel并下载到客户端,具体内容如下 Maven配置,包含了其他文件格式的依赖,就全贴出来了 org.apache.poi poi-excelant 3.12 org.apac ...

  5. Java web项目利用POI导出EXCEL表格

    SSH2 POI导出EXCEL表格 1.首先导入poi的jar包 HSSFWorkbook :工作簿,代表一个excel的整个文档 HSSFSheet:工作表 HSSFRow :行 HSSFCell: ...

  6. springBoot使用poi导出Excel

    一.导入依赖 <dependency><groupId>org.apache.poi</groupId><artifactId>poi</arti ...

  7. 利用poi 读取excel通用工具类

    poi excel导出通用工具 | 这一行是废话 根据上一篇利用poi 导出excel通用工具类去年写的一个工具类,同样根据业务需求重新封装了一个读excel 工具类,感觉还算通用,分享到博客,欢迎各 ...

  8. 蓄力-利用POI进行excel的导入导出(包含图片)

    这里写自定义目录标题 利用POI进行excel的导入导出 引入的jar包 excel导入 主方法: 将excel里面的图片转成数据 xls格式 xlsx格式 将图片数据转成字节流的方式传输到FTP服务 ...

  9. Java POI 导出EXCEL经典实现 Java导出Excel弹出下载框

    原文转载:http://blog.csdn.net/evangel_z/article/details/7332535 目录(?)[+] 在web开发中,有一个经典的功能,就是数据的导入导出.特别是数 ...

最新文章

  1. 机器学习(18)-- SVM支持向量机(根据身高体重分类性别)
  2. linux 加密库 libsodium 安装
  3. 【STM32】 keil软件工具--菜单详解
  4. oracle高级复制管理里面,配置高级复制问题,请大家指点!
  5. 《移动优先与响应式Web设计》一1.2 设备不同,功能不同
  6. bp神经网络训练_数据分析模型6——神经网络基础(人工智能的底层模型)
  7. 32 块大小_详解Linux文件系统的完整结构--引导块、超级块、GDT等
  8. 在日常生活中,经常会遇到某些需求对文件名称进行修改,借助刚学过的文件操作,编写一个可以批量修改文件名的小程序。
  9. 关于Floyd-Warshall算法由前趋矩阵计算出的最短路径反映出了算法的执行过程特性的证明...
  10. Scala学习04——Scala方法与函数
  11. 【电路仿真】基于matlab Simulink光伏太阳能电池板仿真模型【含Matlab源码 771期】
  12. mysql 慢日志 逻辑读_学会读懂 MySql 的慢查询日志
  13. map转json,json转对象
  14. 4行代码,Python玩转美图秀秀
  15. PDFCreator pdf制作软件+教程
  16. 单点登录原理与简单实现
  17. java实现lda模型_lda模型 java
  18. 台式计算机如何自动开关机,联想电脑怎么设置定时开机|联想台式机自动开机设置方法...
  19. 【问题解决】This scheduler instance is still active but was recovered by another instance in the cluster.
  20. SQLyog免费下载地址

热门文章

  1. 20155207王雪纯 《Java程序设计》实验一报告
  2. 自动化构建之bower
  3. 现代软件工程 第一章 四则运算的实现--栈实现
  4. c#获取屏幕分辨率信息
  5. WebSVN(2.3.1版本)中文注释以及中文路径乱码的解决方法【未完待续】
  6. 计算机专业人士,必读之经典图书
  7. 有故事、有实践,谈一谈深度迁移学习方法的基本思路
  8. 竞赛推荐:openEuler 高校开发者大赛启动!
  9. “开发人”注意了!百度AI快车道成都站:来了就不想走的活动
  10. 当AI遇上云计算,北京 · DevRun 华为云开发者大会