SpringBoot集成Apache POI实现Excel的导入导出

 更新时间:2024年06月11日 08:39:24   作者:小呆呆^  
Apache POI是一个流行的Java库,用于处理Microsoft Office格式文件,包括Excel文件,本文主要介绍了SpringBoot集成Apache POI实现Excel的导入导出,具有一定的参考价值,感兴趣的可以了解一下

前言

在 Spring Boot 中使用 Apache POI 实现 Excel 的导入和导出功能是一种常见的做法。Apache POI 是一个流行的 Java 库,用于处理 Microsoft Office 格式文件,包括 Excel 文件。在 Spring Boot 中结合 Apache POI 可以轻松地实现 Excel 文件的读写操作。下面我将详细介绍如何在 Spring Boot 中使用 Apache POI 实现 Excel 的导入和导出。

一、Apache POI 是什么?

  • Apache POI(Poor Obfuscation Implementation)是一个流行的 Java 库,用于处理 Microsoft Office 格式文件,包括 Word 文档、Excel 表格和 PowerPoint 演示文稿。它提供了一组类和方法,使开发人员能够读取、创建和修改这些 Office 格式文件。

  • Apache POI 提供了对 Office 格式文件的抽象表示,使得开发人员可以在程序中操作这些文件的内容、格式和样式。通过 Apache POI,开发人员可以实现诸如从 Excel 中导入数据、向 Word 文档中插入表格、从 PowerPoint 中提取文本等操作。

  • Apache POI 由 Apache 软件基金会维护和发布,是一个开源项目。它为 Java 开发人员提供了处理 Office 格式文件的强大工具,使得在 Java 应用程序中集成 Office 文件操作变得更加便捷和灵活。

二、使用 Apache POI 实现 Excel 的导入和导出

① 导入 Excel

1. 添加依赖

首先,在 Maven 或 Gradle 项目中的配置文件中添加 Apache POI 的依赖项。

Maven 依赖:

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>{latest_version}</version>
</dependency>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>{latest_version}</version>
</dependency>

Gradle 依赖:

implementation 'org.apache.poi:poi:{latest_version}'
implementation 'org.apache.poi:poi-ooxml:{latest_version}'

2. 编写导入逻辑

编写一个方法,该方法接收上传的 Excel 文件,并解析其中的数据。这里以导入用户信息为例:

import org.apache.poi.ss.usermodel.*;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

@Service
public class ExcelImportService {

    public List<User> importUsers(InputStream inputStream) throws Exception {
        List<User> userList = new ArrayList<>();

        Workbook workbook = WorkbookFactory.create(inputStream);
        Sheet sheet = workbook.getSheetAt(0); // 假设用户信息在第一个 Sheet 中

        Iterator<Row> rowIterator = sheet.iterator();
        while (rowIterator.hasNext()) {
            Row row = rowIterator.next();
            if (row.getRowNum() == 0) { // 跳过表头
                continue;
            }

            User user = new User();
            user.setId(row.getCell(0).getStringCellValue());
            user.setName(row.getCell(1).getStringCellValue());
            // 解析更多字段...

            userList.add(user);
        }

        workbook.close();
        return userList;
    }
}

3. 在 Controller 中处理上传请求

import org.springframework.web.multipart.MultipartFile;

@RestController
@RequestMapping("/import")
public class ExcelImportController {

    @Autowired
    private ExcelImportService excelImportService;

    @PostMapping("/users")
    public ResponseEntity<String> importUsers(@RequestParam("file") MultipartFile file) {
        try {
            List<User> userList = excelImportService.importUsers(file.getInputStream());
            // 处理导入的用户数据,如保存到数据库等
            return ResponseEntity.ok("导入成功");
        } catch (Exception e) {
            e.printStackTrace();
            return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("导入失败");
        }
    }
}

② 导出 Excel

1. 添加依赖

已经在前面添加了 Apache POI 的依赖,这里不需要重复添加。

2. 编写导出逻辑

编写一个方法,该方法将数据写入到 Excel 文件中并提供下载链接。这里同样以导出用户信息为例:

import org.apache.poi.ss.usermodel.*;

import javax.servlet.http.HttpServletResponse;
import java.util.List;

@Service
public class ExcelExportService {

    public void exportUsers(List<User> userList, HttpServletResponse response) throws Exception {
        Workbook workbook = new XSSFWorkbook();
        Sheet sheet = workbook.createSheet("用户信息");

        // 创建表头
        Row headerRow = sheet.createRow(0);
        headerRow.createCell(0).setCellValue("ID");
        headerRow.createCell(1).setCellValue("姓名");
        // 添加更多字段...

        // 写入数据
        int rowNum = 1;
        for (User user : userList) {
            Row row = sheet.createRow(rowNum++);
            row.createCell(0).setCellValue(user.getId());
            row.createCell(1).setCellValue(user.getName());
            // 添加更多字段...
        }

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

        // 输出到响应流
        workbook.write(response.getOutputStream());
        workbook.close();
    }
}

3. 在 Controller 中处理导出请求

@RestController
@RequestMapping("/export")
public class ExcelExportController {

    @Autowired
    private ExcelExportService excelExportService;

    @GetMapping("/users")
    public void exportUsers(HttpServletResponse response) {
        try {
            List<User> userList = userService.getAllUsers(); // 假设获取所有用户信息的方法
            excelExportService.exportUsers(userList, response);
        } catch (Exception e) {
            e.printStackTrace();
            // 处理异常
        }
    }
}

总结

本文简单讲述了Spring Boot 中使用 Apache POI 实现 Excel 的导入和导出的方法步骤,通过 Apache POI,我们可以方便地处理 Excel 文件,完成数据的导入和导出操作。更多相关SpringBoot POI Excel导入导出内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java多线程编程之捕获子线程异常示例

    java多线程编程之捕获子线程异常示例

    java多线程程序中所有线程都不允许抛出未捕获的checked exception,也就是说各个线程需要自己把自己的checked exception处理掉。但是无法避免的是unchecked exception,也就是RuntimeException,当抛出异常时子线程会结束,但不会影响主线程
    2014-02-02
  • Java猜数字游戏从思路到实现开发全过程

    Java猜数字游戏从思路到实现开发全过程

    猜数字游戏虽然简单,却涵盖了程序设计的基本要素,数据处理、流程控制、用户交互和异常处理,这篇文章主要介绍了Java猜数字游戏从思路到实现开发的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-10-10
  • SpringBoot 配置文件中配置的中文,程序读取出来是乱码的解决

    SpringBoot 配置文件中配置的中文,程序读取出来是乱码的解决

    这篇文章主要介绍了SpringBoot 配置文件中配置的中文,程序读取出来是乱码的解决,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • Javaweb 500 服务器内部错误的解决

    Javaweb 500 服务器内部错误的解决

    这篇文章主要介绍了Javaweb 500 服务器内部错误的解决方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • Java中异常传播的实现

    Java中异常传播的实现

    在Java中,异常传播是一个重要的概念,本文主要介绍了Java中异常传播的实现,具有一定的参考价值,感兴趣的可以了解一下
    2024-01-01
  • 透明化Sharding-JDBC数据库字段加解密方案

    透明化Sharding-JDBC数据库字段加解密方案

    这篇文章主要为大家介绍了透明化Sharding-JDBC数据库字段加解密方案,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-02-02
  • idea hibernate jpa 生成实体类的实现

    idea hibernate jpa 生成实体类的实现

    这篇文章主要介绍了idea hibernate jpa 生成实体类的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11
  • Java 无符号右移与右移运算符的使用介绍

    Java 无符号右移与右移运算符的使用介绍

    这篇文章主要介绍了Java 无符号右移与右移运算符的使用介绍,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-06-06
  • Java日期转换注解配置date format时间失效

    Java日期转换注解配置date format时间失效

    这篇文章主要为大家介绍了Java日期转换注解配置date format时间失效,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • Spring中Service注入多个实现类的方法详解

    Spring中Service注入多个实现类的方法详解

    这篇文章主要介绍了Spring中Service注入多个实现类的方法详解,Spring是一个开源的Java框架,用于构建企业级应用程序,它提供了许多功能,如依赖注入、面向切面编程、数据访问、Web开发等,需要的朋友可以参考下
    2023-07-07

最新评论