Java SpringMVC框架开发之数据导出Excel文件格式实例详解

yizhihongxing

Java SpringMVC框架开发之数据导出Excel文件格式实例详解

前言

在Web应用程序中,数据导出的需求是比较常见的。本文介绍如何在Java SpringMVC框架中开发,实现将数据导出到Excel文件格式的功能。本文的示例代码基于SpringMVC 5.2.5版本和Apache POI 4.1.2版本实现。

准备工作

在开始本文的实例之前,需要做好以下准备工作:

  1. 确认已经安装了JDK和Eclipse IDE。

  2. 在Eclipse中,创建一个新的Dynamic Web Project,名称为"springmvc-excel-export"。使用Maven来管理项目的依赖。

  3. 在项目的pom.xml文件中添加以下必要的依赖:

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-webmvc</artifactId>
  <version>5.2.5.RELEASE</version>
</dependency>
<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. 创建一个Controller类,并添加一个用于导出Excel文件的方法。
@Controller
public class ExcelExportController {

  @GetMapping("/export")
  public void export(HttpServletResponse response) throws IOException {
      // TODO: 在这里添加导出Excel文件的代码
  }
}
  1. 在export方法中,使用Apache POI库来创建一个Excel工作簿,并向其中添加数据。
XSSFWorkbook workbook = new XSSFWorkbook();
XSSFSheet sheet = workbook.createSheet("Sheet 1");

Row headerRow = sheet.createRow(0);
headerRow.createCell(0).setCellValue("Name");
headerRow.createCell(1).setCellValue("Age");
headerRow.createCell(2).setCellValue("Gender");

Row dataRow = sheet.createRow(1);
dataRow.createCell(0).setCellValue("Tom");
dataRow.createCell(1).setCellValue(25);
dataRow.createCell(2).setCellValue("Male");
  1. 将工作簿写入到输出流中,并将输出流作为响应发送给客户端浏览器。
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setHeader("Content-disposition", "attachment; filename=example.xlsx");
OutputStream outputStream = response.getOutputStream();
workbook.write(outputStream);
outputStream.flush();
outputStream.close();
workbook.close();

到此为止,我们已经完成了一个导出Excel文件的示例,完整的代码如下所示:

@Controller
public class ExcelExportController {

  @GetMapping("/export")
  public void export(HttpServletResponse response) throws IOException {
    XSSFWorkbook workbook = new XSSFWorkbook();
    XSSFSheet sheet = workbook.createSheet("Sheet 1");

    Row headerRow = sheet.createRow(0);
    headerRow.createCell(0).setCellValue("Name");
    headerRow.createCell(1).setCellValue("Age");
    headerRow.createCell(2).setCellValue("Gender");

    Row dataRow = sheet.createRow(1);
    dataRow.createCell(0).setCellValue("Tom");
    dataRow.createCell(1).setCellValue(25);
    dataRow.createCell(2).setCellValue("Male");

    response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
    response.setHeader("Content-disposition", "attachment; filename=example.xlsx");
    OutputStream outputStream = response.getOutputStream();
    workbook.write(outputStream);
    outputStream.flush();
    outputStream.close();
    workbook.close();
  }
}

示例说明

示例1:实现从数据库中读取数据并导出到Excel文件

在本示例中,我们将实现一个从数据库中读取数据并导出到Excel文件的功能。

  1. 首先,创建一个新的Java类"User.java",用于表示User对象:
public class User {
  private Long id;
  private String name;
  private Integer age;
  private String gender;

  // ... getters and setters
}
  1. 在我们的应用程序中,创建一个UserService类,用于从数据库中读取用户数据:
@Service
public class UserService {
  @Autowired
  private UserRepository userRepository;

  public List<User> findAll() {
    return userRepository.findAll();
  }
}
  1. 创建一个新的UserController类,用于处理"http://localhost:8080/export"请求,并从UserService中获取数据,并使用POI库将数据导出到Excel文件中:
@Controller
public class UserController {
  @Autowired
  private UserService userService;

  @GetMapping("/export")
  public void export(HttpServletResponse response) throws IOException {
    List<User> users = userService.findAll();

    XSSFWorkbook workbook = new XSSFWorkbook();
    XSSFSheet sheet = workbook.createSheet("Sheet 1");

    // create header row
    Row headerRow = sheet.createRow(0);
    headerRow.createCell(0).setCellValue("Name");
    headerRow.createCell(1).setCellValue("Age");
    headerRow.createCell(2).setCellValue("Gender");

    // create data rows
    int rowNum = 1;
    for (User user : users) {
      Row row = sheet.createRow(rowNum++);
      row.createCell(0).setCellValue(user.getName());
      row.createCell(1).setCellValue(user.getAge());
      row.createCell(2).setCellValue(user.getGender());
    }

    response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
    response.setHeader("Content-disposition", "attachment; filename=users.xlsx");

    OutputStream outputStream = response.getOutputStream();
    workbook.write(outputStream);
    outputStream.flush();
    outputStream.close();
    workbook.close();
  }
}

示例2:实现将多张表的数据导出到同一个Excel文件

在这个示例中,我们将展示如何将多张表的数据导出到同一个Excel文件。

  1. 在我们的应用程序中创建一个ProductService类,用于从数据库中读取产品数据:
@Service
public class ProductService {
  @Autowired
  private ProductRepository productRepository;

  public List<Product> findAll() {
    return productRepository.findAll();
  }
}
  1. 创建一个新的ProductController类,用于处理"http://localhost:8080/export"请求,并从ProductService中获取数据,并使用POI库将数据导出到Excel文件中:
@Controller
public class ProductController {
  @Autowired
  private ProductService productService;

  @GetMapping("/export")
  public void export(HttpServletResponse response) throws IOException {
    List<Product> products = productService.findAll();

    XSSFWorkbook workbook = new XSSFWorkbook();
    for (Product product : products) {
      String sheetName = "Product #" + product.getId();
      XSSFSheet sheet = workbook.createSheet(sheetName);

      Row headerRow = sheet.createRow(0);
      headerRow.createCell(0).setCellValue("Name");
      headerRow.createCell(1).setCellValue("Price");

      Row dataRow = sheet.createRow(1);
      dataRow.createCell(0).setCellValue(product.getName());
      dataRow.createCell(1).setCellValue(product.getPrice());
    }

    response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
    response.setHeader("Content-disposition", "attachment; filename=products.xlsx");

    OutputStream outputStream = response.getOutputStream();
    workbook.write(outputStream);
    outputStream.flush();
    outputStream.close();
    workbook.close();
  }
}

在本示例中,我们使用了XSSFWorkbook来创建Excel文件,使用XSSFSheet来创建Excel工作表。根据不同的产品,我们创建了一个新的工作表,将数据导出到其中。

结语

通过本篇文章的学习,我们可以学习到如何在Java SpringMVC框架中开发,实现将数据导出到Excel文件格式的功能。其中,我们使用了Apache POI库来创建Excel文件,并向其中添加数据。在实际的开发中,需要根据具体的场景和需求,对代码进行修改和优化。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java SpringMVC框架开发之数据导出Excel文件格式实例详解 - Python技术站

(0)
上一篇 2023年6月3日
下一篇 2023年6月3日

相关文章

  • 关于json序列化(javaBean转Json的细节处理)

    关于json序列化(javaBean转Json的细节处理)的攻略,我将会从以下几个方面进行讲解: 什么是Json序列化 如何进行Json序列化 JavaBean转Json的细节处理 什么是Json序列化 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,由于其简洁性、易于读写和解析、支持多种语言等特性,已经成为了互联…

    Java 2023年5月26日
    00
  • Java实现医院管理系统

    Java实现医院管理系统完整攻略 简介 医院管理系统是一个涉及多种功能的系统,它包含的功能有:病人管理、医生排班、药品管理、患者预约挂号等。通过Java语言实现医院管理系统,可以大大提高医院管理的效率,同时也为医院的信息化建设做出了贡献。 技术选型 为了实现医院管理系统,我们需要选择适当的技术来支撑,具体如下: 后端框架:Spring Framework 数…

    Java 2023年5月19日
    00
  • Java C++算法题解leetcode801使序列递增的最小交换次数

    让我来详细讲解一下“Java C++算法题解leetcode801使序列递增的最小交换次数”的完整攻略。 问题描述 题目名称:使序列递增的最小交换次数 题目描述:给定一个数组 nums,你需要将数组连续的子序列进行升序排列,使得最终得到的数组是递增的。请你计算并返回最少的交换次数,使得数组满足题意。 示例 1: 输入:nums = [1,3,5,4,2,6,…

    Java 2023年5月26日
    00
  • Java实现高校教务系统

    Java实现高校教务系统完整攻略 一、需求分析和功能设计 在进行Java编程实现高校教务系统前,需要先对系统进行需求分析,梳理系统的核心功能,并进行功能设计。主要功能包括: 学生管理模块:包括学生信息的录入、查询、修改、删除等功能。 教师管理模块:包括教师信息的录入、查询、修改、删除等功能。 课程管理模块:包括课程信息的录入、查询、修改、删除等功能。 成绩管…

    Java 2023年5月23日
    00
  • java 学习笔记(入门篇)_java的基础语法

    《Java 学习笔记(入门篇)_Java 的基础语法》是一篇旨在帮助 Java 初学者掌握基础语法的文章。它逐步介绍了 Java 的基础数据类型、运算符、控制语句、数组、面向对象等内容,并给出了一些例子,帮助读者更好地理解这些概念。 以下是该篇攻略的详细介绍: Java 的基础数据类型 Java 的基础数据类型包括整型、浮点型、字符型、布尔型等。这些数据类型…

    Java 2023年5月23日
    00
  • 详解SpringCloud Gateway之过滤器GatewayFilter

    下面是Spring Cloud Gateway过滤器GatewayFilter的详解攻略: 什么是Gateway Filter Spring Cloud Gateway 的过滤器(Filters)提供了许多内置的功能,包括路由转发、限流、安全、监控等。Gateway Filter 是一个基本的工作单元,它由若干个有顺序的 GatewayFilter组成。每个…

    Java 2023年5月20日
    00
  • 关于MyBatis10种超好用的写法(收藏)

    下面我将为你详细讲解“关于MyBatis10种超好用的写法(收藏)”的完整攻略。 首先,这篇攻略详细介绍了 MyBatis 框架的 10 种超好用的写法,这包括代码优化、动态SQL、可重用的SQL段等等。具体的写法包括: MyBatis 缓存优化 MyBatis 批处理插入 MyBatis 动态表名 MyBatis 动态 SQL MyBatis In 操作简…

    Java 2023年6月1日
    00
  • Spring Boot系列教程之日志配置

    SpringBoot系列教程之日志配置 在SpringBoot项目中,对日志进行定制和配置是非常重要的。通过合理的日志配置,可以对程序进行细致的排查和问题定位。本文将针对SpringBoot项目中的日志配置进行详细的讲解。 1. 了解logback和log4j的区别 在SpringBoot默认的日志框架中,使用的是logback。但是在实际项目中,也有部分使…

    Java 2023年5月15日
    00
合作推广
合作推广
分享本页
返回顶部