SpringBoot - 使用HSSFWorkbook生成excel教程1 - 心如止水~ - 博客园 -- 与上一篇也不是好方法 - 反面例子

在许多项目中,将数据库资料导出为 Excel 是一个很常见的需求,具体实现简单来说就是后端提供导出接口,前端下载导出数据即可。Jakarta POI 是一套用于访问微软格式文档的 Java API,它由很多组件组成,其中有用于操作 Excel 格式文件的 HSSF 和用于操作 Word 的 HWPF,本文使用前者实现 Excel 文件的导出。

一、将数据导出成 excel 文件

1,添加依赖

编辑项目的 pom.xml 文件,添加 poi 相关依赖:

1

2

3

4

5

<`dependency`>

<`groupId>org.apache.poi</groupId`>

<`artifactId>poi</artifactId`>

<`version>3.17</version`>

</`dependency`>

2,创建数据模型

这里我们定义一个 User 模型对象,后面将会将其导出成 excel。

1

2

3

4

5

6

7

8

9

10

@Getter

@Setter

@AllArgsConstructor

public class User {

private int id;

private String name;

private String gender;

private Date birthday;

private String workID;

}

3,创建导出工具类

    为方便使用,这里封装一个用于导出数据的工具类。里面主要工作是构建一个 HSSFWorkbook 并进行一些 Excel 基本信息配置(文档信息、列的宽度、表头配置等),然后遍历 users 集合,将数据导出到 Excel 中。

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

public class PoiUtils {

// 将数据导出成excel文件

public static ResponseEntity<`byte`[]> exportUser2Excel(List<User> users) {

HttpHeaders headers = `null`;

ByteArrayOutputStream baos = `null`;

try {

//1.创建Excel文档

HSSFWorkbook workbook = `new HSSFWorkbook();`

//2.创建文档摘要

workbook.createInformationProperties();

//3.获取文档信息,并配置

DocumentSummaryInformation dsi = workbook.getDocumentSummaryInformation();

//3.1文档类别

dsi.setCategory(`"人员信息"`);

//3.2设置文档管理员

dsi.setManager(`"hangge"`);

//3.3设置组织机构

dsi.setCompany(`"航歌"`);

//4.获取摘要信息并配置

SummaryInformation si = workbook.getSummaryInformation();

//4.1设置文档主题

si.setSubject(`"人员信息表"`);

//4.2.设置文档标题

si.setTitle(`"人员信息"`);

//4.3 设置文档作者

si.setAuthor(`"hangge"`);

//4.4设置文档备注

si.setComments(`"备注信息暂无"`);

//创建Excel表单

HSSFSheet sheet = workbook.createSheet(`"2019年人员信息"`);

//创建日期显示格式

HSSFCellStyle dateCellStyle = workbook.createCellStyle();

dateCellStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat(`"m/d/yy"`));

//创建标题的显示样式

HSSFCellStyle headerStyle = workbook.createCellStyle();

headerStyle.setFillForegroundColor(IndexedColors.YELLOW.index);

headerStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);

//定义列的宽度

sheet.setColumnWidth(`05 256);`

sheet.setColumnWidth(`112 256);`

sheet.setColumnWidth(`210 256);`

sheet.setColumnWidth(`35 256);`

sheet.setColumnWidth(`412 256);`

//5.设置表头

HSSFRow headerRow = sheet.createRow(`0`);

HSSFCell cell0 = headerRow.createCell(`0`);

cell0.setCellValue(`"编号"`);

cell0.setCellStyle(headerStyle);

HSSFCell cell1 = headerRow.createCell(`1`);

cell1.setCellValue(`"姓名"`);

cell1.setCellStyle(headerStyle);

HSSFCell cell2 = headerRow.createCell(`2`);

cell2.setCellValue(`"工号"`);

cell2.setCellStyle(headerStyle);

HSSFCell cell3 = headerRow.createCell(`3`);

cell3.setCellValue(`"性别"`);

cell3.setCellStyle(headerStyle);

HSSFCell cell4 = headerRow.createCell(`4`);

cell4.setCellValue(`"出生日期"`);

cell4.setCellStyle(headerStyle);

//6.装数据

for (`int i = 0; i < users.size(); i++) {`

HSSFRow row = sheet.createRow(i + `1`);

User user = users.get(i);

row.createCell(`0`).setCellValue(user.getId());

row.createCell(`1`).setCellValue(user.getName());

row.createCell(`2`).setCellValue(user.getWorkID());

row.createCell(`3`).setCellValue(user.getGender());

HSSFCell birthdayCell = row.createCell(`4`);

birthdayCell.setCellValue(user.getBirthday());

birthdayCell.setCellStyle(dateCellStyle);

}

headers = `new HttpHeaders();`

headers.setContentDispositionFormData(`"attachment"`,

new String(`"人员信息表.xls".getBytes("UTF-8"), "iso-8859-1"`));

headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);

baos = `new ByteArrayOutputStream();`

workbook.write(baos);

`catch (IOException e) {`

e.printStackTrace();

}

return new ResponseEntity<`byte`[]>(baos.toByteArray(), headers, HttpStatus.CREATED);

}

}

4,使用样例

(1)我们再创建一个 Controller 调用这个工具类来导出 excel 文件:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

@RestController

public class HelloController {

@GetMapping`("/exportUser")`

public ResponseEntity<`byte`[]> exportUser() {

// 准备需要导出的数据

List<User> users = `new ArrayList<>();`

users.add(`new User(1,"张三""男"new` `Date(), "01001"`));

users.add(`new User(2,"李四""男"new` `Date(), "01002"`));

users.add(`new User(3,"王五""女"new` `Date(), "01003"`));

// 将数据导出成excel

return PoiUtils.exportUser2Excel(users);

}

}

(2)前端代码比较简单,只要在用户点击“导出”按钮时,执行如下代码发起请求下载文件即可:

1

window.open(`"/exportUser""parent"`);

(3)下载下来的 Excel 里的内容如下:

原文:SpringBoot - 使用HSSFWorkbook操作excel教程1(将数据导出成excel文件)


原网址: 访问
创建于: 2021-02-02 17:00:40
目录: default
标签: 无

请先后发表评论
  • 最新评论
  • 总共0条评论