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日

相关文章

  • SpringBoot部署xxl-job方法详细讲解

    SpringBoot部署xxl-job方法详细讲解 1. 简介 xxl-job是一款分布式定时任务调度平台,支持固定间隔、固定时间以及CRON表达式等多种调度方式,同时也支持多线程、任务追踪、报警监控、在线日志等多种实用功能。而SpringBoot作为目前流行的开发框架之一,为xxl-job的部署提供了便利。 本攻略将详细介绍在SpringBoot应用中如何…

    Java 2023年5月19日
    00
  • java 实现数组扩容与缩容案例

    下面是详细的讲解: 背景 在Java中,数组是一种常见的数据结构,但是它具有固定长度的限制,因此需要进行扩容与缩容的操作。实现数组扩容与缩容可以提高程序的灵活性和效率,因此很有必要进行了解和掌握。 实现方法 Java中的数组扩容与缩容可以通过以下三种方法来实现: 手动操作:通过新建一个更大/更小的数组,并将原有的元素拷贝到新数组中来实现扩容/缩容操作; 利用…

    Java 2023年5月26日
    00
  • Java字符串拼接的优雅方式实例详解

    下面是Java字符串拼接的优雅方式实例详解。 什么是Java字符串拼接? Java字符串拼接指的是将多个字符串连接起来,生成一个新的字符串的过程。在Java中,我们通常使用+号或StringBuilder类来完成字符串拼接。 为什么需要优雅的字符串拼接方式? 在实际项目中,字符串拼接是经常被执行的操作,对于一些复杂的拼接操作,使用简单的字符串拼接方式容易犯错…

    Java 2023年5月26日
    00
  • Midjourney:一步一步教你如何使用 AI 绘画 MJ

    一步一步如何使用 Midjourney 教程:教学怎么用 MJ? 一、Midjourney(MJ)是什么? Midjourney是一款使用文字描述来生成高质量图像的AI绘画工具。这篇文章主要介绍了Midjourney及其用途,并针对Midjourney的使用提供了一些指南。该工具可以帮助人们更快速、更容易地创建图像。 与市场上的其他AI绘画工具相比,Midj…

    Java 2023年4月22日
    00
  • SpringBoot超详细讲解多数据源集成

    下面是关于“SpringBoot超详细讲解多数据源集成”的完整攻略: 1. 背景 在实际开发中,我们常常需要使用多个数据源,例如交易数据库、日志数据库等。而使用SpringBoot可以很方便地实现多数据源的集成。 2. 配置多数据源 在application.properties中配置多数据源,示例代码如下: ### 配置第一个数据源 spring.data…

    Java 2023年5月20日
    00
  • JAVA多线程之中断机制stop()、interrupted()、isInterrupted()

    Java多线程之中断机制stop()、interrupted()、isInterrupted() 什么是中断机制? 在Java多线程编程中,中断机制是一种线程协作机制。由于线程的正常执行过程中,往往需要等待I/O操作或其它原因,这些等待过程可能会导致程序执行过程被阻塞。因此,一些长时间的阻塞操作如果不能在合理的时间内得到响应,就需要使用中断机制进行打断。通过…

    Java 2023年5月19日
    00
  • Java多线程程序中synchronized修饰方法的使用实例

    下面是Java多线程程序中synchronized修饰方法的使用实例的详细攻略。 什么是多线程和synchronized? 多线程是指在同一时间内,多个线程同时执行,每个线程负责执行其中一部分代码,以达到加速程序运行的目的。 synchronized是Java中实现线程同步的关键字,它可以用来修饰方法或对象。当一个方法或一个对象被synchronized关键…

    Java 2023年5月19日
    00
  • Spring如何处理表单提交

    Spring框架可以很方便地处理表单提交。下面是处理表单提交的完整攻略: 1.定义表单 首先需要在视图层面定义表单。例如,在jsp页面中,可以使用HTML表单元素来定义表单。例如,下面是一个简单的HTML表单元素: <form action="submitForm" method="post"> <l…

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