每一秒钟的时间都值得铭记

0%

easypoi+SpringBoot导出Excel文件

导出Excel文件是Web系统中极为常见的一个操作,今天我们来学习使用easypoi+SpringBoot来实现Excel文件的导出功能。

引入依赖

该项目既然是结合SpringBoot来进行开发的,那么我们直接导出easypoi的SpringBoot的启动器依赖,至于SpringBoot的其他依赖,可以参考我以前的SpringBoot项目依赖。

1
2
3
4
5
6
<!--excel操作-->
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-spring-boot-starter</artifactId>
<version>3.3.0</version>
</dependency>

注解实体类

我们可以使用@Excel注解来标注实体类属性,同时配置实体类属性的导出参数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@Data
@TableName("user")
public class User implements Serializable {
@TableId(type = IdType.AUTO)
@Excel(name = "ID", orderNum = "0", width = 15)
private Integer id;
@Excel(name = "用户名", orderNum = "1", width = 15)
private String username;
@Excel(name = "姓名", orderNum = "2", width = 15)
private String name;
@Excel(name = "性别", orderNum = "3", width = 15)
private Integer gender;
@Excel(name = "出生日期", orderNum = "4", width = 30, format = "yyyy-MM-dd")
private Date birthday;
@Excel(name = "手机号码", orderNum = "5", width = 15)
private String phone;
}

ExcelUtils

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
/**
* @description: Excel导入导出工具类
*/
@Component
public class ExcelUtils {

/**
* 对外的导出excel方法,exportExcel重载方法
* 该方法通过传入ExportParams对象参数指定标题和表名称
*
* @param fileName 文件名称
* @param exportParams ExportParams对象,导出参数
* @param exportClass 导出对象的字节码对象
* @param exportData 导出的数据
* @param response HttpServletResponse对象
* @throws IOException IO异常
*/
public static void exportExcel(String fileName, ExportParams exportParams, Class<?> exportClass, List<?> exportData, HttpServletResponse response) throws IOException {
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, exportClass, exportData);
downloadExcel(fileName, workbook, response);
}

/**
* 对外的导出excel方法,exportExcel重载方法
* 该方法可以指定文件名称、标题名称、表名称
*
* @param fileName 文件名称
* @param title excel标题
* @param sheetName excel表名
* @param exportClass 导出对象的字节码对象
* @param exportData 导出的数据
* @param response HttpServletResponse对象
* @throws IOException IO异常
*/
public static void exportExcel(String fileName, String title, String sheetName, Class<?> exportClass, List<?> exportData, HttpServletResponse response) throws IOException {
ExportParams exportParams = new ExportParams();
exportParams.setTitle(title);
exportParams.setCreateHeadRows(true);
exportParams.setSheetName(sheetName);
exportParams.setType(ExcelType.XSSF);
defaultExport(fileName, exportParams, exportClass, exportData, response);
}

/**
* 对外的导出excel方法,exportExcel重载方法(简化方法)
* 该方法可以指定文件名称,默认标题和表名称为文件名称
*
* @param fileName 文件名称
* @param exportClass 导出对象的字节码对象
* @param exportData 导出的数据
* @param response HttpServletResponse对象
* @throws IOException IO异常
*/
public static void exportExcel(String fileName, Class<?> exportClass, List<?> exportData, HttpServletResponse response) throws IOException {
ExportParams exportParams = new ExportParams();
exportParams.setTitle(fileName);
exportParams.setCreateHeadRows(true);
exportParams.setSheetName(fileName);
exportParams.setType(ExcelType.XSSF);
defaultExport(fileName, exportParams, exportClass, exportData, response);
}

/**
* 默认导出方法,私有
*
* @param fileName 文件名称
* @param exportParams ExportParams对象,导出参数
* @param exportClass 导出对象的字节码对象
* @param exportData 导出的数据
* @param response HttpServletResponse对象
* @throws IOException IO异常
*/
private static void defaultExport(String fileName, ExportParams exportParams, Class<?> exportClass, List<?> exportData, HttpServletResponse response) throws IOException {
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, exportClass, exportData);
downloadExcel(fileName, workbook, response);
}


/**
* 下载Excel,私有
*
* @param fileName 文件名称
* @param workbook Workbook对象
* @param response HttpServletResponse对象
* @throws IOException IO异常
*/
private static void downloadExcel(String fileName, Workbook workbook, HttpServletResponse response) throws IOException {
response.setCharacterEncoding("UTF-8");
response.setHeader("Content-Type", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
workbook.write(response.getOutputStream());
}
}

导出Excel

1
2
3
4
5
6
@GetMapping("export")
public ResponseEntity<Void> export(HttpServletResponse response) throws Exception {
List<User> exportData = userService.findList();
ExcelUtils.exportExcel("用户列表",User.class,exportData,response);
return ResponseEntity.ok().build();
}

该ExcelUtils导出工具类,导出的是.xlsx后缀类型的Excel文件,如果需要导出.xls后缀类型的文件,需要将工具类中response设置的Content-Disposition属性修改为application/vnd.ms-excel即可。

坚持原创技术分享,您的支持将鼓励我继续创作!
-------------这是我的底线^_^-------------