springboot实现excel表格导出几种常见方法

  • A+
所属分类:知识百科

在Spring Boot中,实现Excel表格导出的方式有很多种,以下是几种常见的方法:

  • 使用Apache POI:Apache POI是一个开源的Java API,用于处理Microsoft Office文档格式,包括Excel电子表格。在Spring Boot中,可以使用Apache POI创建Excel文档,并将其写入HTTP响应中,以实现Excel表格的导出。
  • 使用EasyPOI:EasyPOI是一个开源的Java API,用于处理Excel电子表格。它基于Apache POI和Jxls开发,提供了更加简单易用的API,可以帮助我们快速实现Excel表格的导出。
  • 使用Jxls:Jxls是一个用于生成Excel报表的Java库。在Spring Boot中,可以使用Jxls创建Excel文档,并将其写入HTTP响应中,以实现Excel表格的导出。
  • 使用第三方库:还有其他一些第三方的Java库可以用于生成Excel电子表格,例如Aspose.Cells、JExcelApi等,它们也可以在Spring Boot中使用,实现Excel表格的导出。

需要注意的是,无论使用哪种方法,都需要将Excel文档写入HTTP响应中,并设置正确的Content-Type和Content-Disposition头信息,以确保浏览器能够正确地识别Excel文档并下载它。

一、Apache POI

  • maven依赖坐标
1
2
3
4
5
6
7
8
9
10
<dependency>
  <groupId>org.apache.poi</groupId>
  <artifactId>poi</artifactId>
  <version>4.1.2</version>
</dependency>
<dependency>
  <groupId>org.apache.poi</groupId>
  <artifactId>poi-ooxml</artifactId>
  <version>4.1.2</version>
</dependency>
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
@RestController
public class ExcelController {
  @GetMapping("/export")
  public void exportExcel(HttpServletResponse response) throws Exception {
    // 创建Excel文档
    XSSFWorkbook workbook = new XSSFWorkbook();
    XSSFSheet sheet = workbook.createSheet("Sheet1");
    // 创建表头
    XSSFRow header = sheet.createRow(0);
    header.createCell(0).setCellValue("姓名");
    header.createCell(1).setCellValue("年龄");
    header.createCell(2).setCellValue("性别");
    // 填充数据
    List<User> users = getUserList();
    int rowIndex = 1;
    for (User user : users) {
      XSSFRow row = sheet.createRow(rowIndex++);
      row.createCell(0).setCellValue(user.getName());
      row.createCell(1).setCellValue(user.getAge());
      row.createCell(2).setCellValue(user.getGender());
    }
    // 设置响应头信息
    response.setContentType("application/vnd.ms-excel");
    response.setHeader("Content-Disposition", "attachment; filename=users.xlsx");
    // 将Excel文档写入响应流中
    ServletOutputStream outputStream = response.getOutputStream();
    workbook.write(outputStream);
    outputStream.flush();
    outputStream.close();
  }
  // 模拟获取用户数据
  private List<User> getUserList() {
    List<User> users = new ArrayList<>();
    users.add(new User("张三", 25, "男"));
    users.add(new User("李四", 30, "女"));
    users.add(new User("王五", 28, "男"));
    return users;
  }
  // 用户实体类
  private static class User {
    private String name;
    private int age;
    private String gender;
    public User(String name, int age, String gender) {
      this.name = name;
      this.age = age;
      this.gender = gender;
    }
    public String getName() {
      return name;
    }
    public void setName(String name) {
      this.name = name;
    }
    public int getAge() {
      return age;
    }
    public void setAge(int age) {
      this.age = age;
    }
    public String getGender() {
      return gender;
    }
    public void setGender(String gender) {
      this.gender = gender;
    }
  }
}

二、Easy POI

  • maven依赖坐标
1
2
3
4
5
6
7
8
9
10
<dependency>
  <groupId>cn.afterturn</groupId>
  <artifactId>easypoi-base</artifactId>
  <version>4.2.0</version>
</dependency>
<dependency>
  <groupId>cn.afterturn</groupId>
  <artifactId>easypoi-web</artifactId>
  <version>4.2.0</version>
</dependency>
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
@RestController
public class ExcelController {
  @GetMapping("/export")
  public void exportExcel(HttpServletResponse response) throws Exception {
    // 创建Excel文档
    Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams("用户列表", "用户信息"), User.class, getUserList());
    // 设置响应头信息
    response.setContentType("application/vnd.ms-excel");
    response.setHeader("Content-Disposition", "attachment; filename=users.xlsx");
    // 将Excel文档写入响应流中
    ServletOutputStream outputStream = response.getOutputStream();
    workbook.write(outputStream);
    outputStream.flush();
    outputStream.close();
  }
  // 模拟获取用户数据
  private List<User> getUserList() {
    List<User> users = new ArrayList<>();
    users.add(new User("张三", 25, "男"));
    users.add(new User("李四", 30, "女"));
    users.add(new User("王五", 28, "男"));
    return users;
  }
  // 用户实体类
  private static class User {
    @Excel(name = "姓名", orderNum = "0")
    private String name;
    @Excel(name = "年龄", orderNum = "1")
    private int age;
    @Excel(name = "性别", orderNum = "2")
    private String gender;
    public User(String name, int age, String gender) {
      this.name = name;
      this.age = age;
      this.gender = gender;
    }
    public String getName() {
      return name;
    }
    public void setName(String name) {
      this.name = name;
    }
    public int getAge() {
      return age;
    }
    public void setAge(int age) {
      this.age = age;
    }
    public String getGender() {
      return gender;
    }
    public void setGender(String gender) {
      this.gender = gender;
    }
  }
}

三、Jxls

  • maven依赖坐标
1
2
3
4
5
6
7
8
9
10
<dependency>
  <groupId>org.jxls</groupId>
  <artifactId>jxls</artifactId>
  <version>2.14.0</version>
</dependency>
<dependency>
  <groupId>org.jxls</groupId>
  <artifactId>jxls-poi</artifactId>
  <version>2.14.0</version>
</dependency>
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
@RestController
public class ExcelController {
  @GetMapping("/export")
  public void exportExcel(HttpServletResponse response) throws Exception {
    // 加载Excel模板
    InputStream inputStream = getClass().getResourceAsStream("/templates/user_template.xlsx");
    Workbook workbook = WorkbookFactory.create(inputStream);
    // 填充数据
    List<User> users = getUserList();
    Map<String, Object> model = new HashMap<>();
    model.put("users", users);
    JxlsHelper.getInstance().processTemplate(model, workbook.getSheetAt(0));
    // 设置响应头信息
    response.setContentType("application/vnd.ms-excel");
    response.setHeader("Content-Disposition", "attachment; filename=users.xlsx");
    // 将Excel文档写入响应流中
    ServletOutputStream outputStream = response.getOutputStream();
    workbook.write(outputStream);
    outputStream.flush();
    outputStream.close();
  }
  // 模拟获取用户数据
  private List<User> getUserList() {
    List<User> users = new ArrayList<>();
    users.add(new User("张三", 25, "男"));
    users.add(new User("李四", 30, "女"));
    users.add(new User("王五", 28, "男"));
    return users;
  }
  // 用户实体类
  private static class User {
    private String name;
    private int age;
    private String gender;
    public User(String name, int age, String gender) {
      this.name = name;
      this.age = age;
      this.gender = gender;
    }
    public String getName() {
      return name;
    }
    public void setName(String name) {
      this.name = name;
    }
    public int getAge() {
      return age;
    }
    public void setAge(int age) {
      this.age = age;
    }
    public String getGender() {
      return gender;
    }
    public void setGender(String gender) {
      this.gender = gender;
    }
  }
}

总结

到此这篇关于springboot实现excel表格导出几种常见方法的文章就介绍到这了

weinxin
自学设计网
微信扫一扫领取设计学习资料/本站会员

发表评论

您必须登录才能发表评论!