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

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日

相关文章

  • Spring+Mybatis动态切换数据源的方法

    下面是详细的“Spring+Mybatis动态切换数据源的方法”的攻略。 1. 准备工作 在实现动态切换数据源之前,我们需要做好以下准备工作: 1.1 确认使用的技术栈 本攻略主要介绍使用Spring和Mybatis实现动态切换数据源的方法,因此,你需要确认自己是否使用这两个框架。 1.2 配置多个数据源 在动态切换数据源之前,你需要先配置多个数据源,可以在…

    Java 2023年5月20日
    00
  • MyBatis映射关系详解

    下面是对”MyBatis映射关系详解”的详细解释及示例。 MyBatis映射关系详解 在MyBatis框架中,映射关系是将SQL语句和Java对象之间的关系进行映射,使得Java对象和数据库表之间的操作变得简单。在MyBatis中,映射关系可以通过XML文档或注解进行配置。 XML映射关系配置 XML映射关系配置主要包括以下两个部分: 结果映射 结果映射是将…

    Java 2023年5月19日
    00
  • Java深入讲解SPI的使用

    Java深入讲解SPI的使用 什么是SPI SPI全称为Service Provider Interface,是Java提供的一种服务发现机制,它通过在classpath路径下查找META-INF/services目录中的配置文件,来实现对接口的实现类自动发现。简单来说,它为接口的实现提供了解耦、可扩展的方式。 SPI的使用步骤 1.创建接口 public …

    Java 2023年5月26日
    00
  • java中tomcat的80端口被占用问题解决

    当我们在运行Tomcat服务器时,可能会遇到端口被占用的问题,这就意味着我们无法使用Tomcat服务器。幸运的是,这个问题可以有多种方法进行解决。下面是一些常见的解决办法: 技巧一:检查端口是否被占用 首先,我们需要确认80端口是否真的被占用。我们可以利用一些命令来查看占用端口的情况。例如,在Windows中,可以使用以下命令检查: netstat -ano…

    Java 2023年6月2日
    00
  • Sprint Boot @RequestParam使用方法详解

    @RequestParam是Spring Boot中的一个注解,它用于将HTTP请求参数映射到控制器方法的参数上。在使用Spring Boot开发Web应用程序时,@RequestParam是非常重要的。本文将详细介绍@RequestParam的作用和使用方法,并提供两个示例说明。 @RequestParam的作用 @RequestParam的作用是将HTT…

    Java 2023年5月5日
    00
  • Java ArrayList.toArray(T[]) 方法的参数类型是 T 而不是 E的原因分析

    让我们来详细讲解一下“Java ArrayList.toArray(T[]) 方法的参数类型是 T 而不是 E的原因分析”。 ArrayList 类是 Java 内置容器类中的一种,它可以生成基于动态数组的可扩容序列。而 ArrayList.toArray(T[]) 方法则是 ArrayList 中用于转换成数组的方法之一。我们知道,ArrayList 中的…

    Java 2023年5月27日
    00
  • GC 日志的作用是什么?

    以下是关于 GC 日志的作用的完整使用攻略: GC 日志的作用是什么? GC 日志是 Java 虚拟机在进行垃圾回收时所产生的日志信息,它记录了垃圾回收的详细过程,包括垃圾回收的类型、回收的时间、回收的对象数量、回收所占用的时间等。GC 日志可以帮助开发人员了解垃圾回收的情况,优化程序的性能和效率。 GC 日志的作用 GC 日志的作用主要有以下几点: 监控垃…

    Java 2023年5月12日
    00
  • 浅谈十个常见的Java异常出现原因

    浅谈十个常见的Java异常出现原因 在Java编程过程中,我们难免会遇到各种各样的异常情况,因此了解常见的Java异常出现原因,可以帮助我们更快地定位和解决问题。下面是10种常见的Java异常及其出现原因: 1. NullPointerException NullPointerException是Java程序员经常会遇到的异常之一,它表示试图访问一个空对象的…

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