如何在SpringBoot中实现Excel数据导出功能?

createh53个月前 (02-01)技术教程43

在一些企业级的应用中,对于数据导出成Excel表格的需求是一个非常常见的需求,在SpringBoot中,我们可以借助于Apache POI库来实现这个需求,下面我们就来详细介绍一下如何在Spring Boot项目中通过Apache POI库来实现Excel的数据导出操作。

引入依赖

Apache POI是Java处理Microsoft Office文件(如Excel)的常用库。首先,需要在Spring Boot项目的pom.xml文件中添加Apache POI的依赖,如下所示。

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>5.2.2</version>
</dependency>

创建导出Excel的工具类

接下来创建一个工具类,用于将数据写入Excel文件。我们可以在这个工具类中定义例如设置Excel表格格式、设置单元格表头等操作内容,这样可以方便我们更好的去扩展这个Excel数据导出的工具类。

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

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.List;

public class ExcelExportUtil {

    public static ByteArrayOutputStream exportToExcel(List<String[]> data, String[] headers) {
        try (Workbook workbook = new XSSFWorkbook();
             ByteArrayOutputStream out = new ByteArrayOutputStream()) {

            // 创建工作表
            Sheet sheet = workbook.createSheet("Data");

            // 创建表头
            Row headerRow = sheet.createRow(0);
            for (int i = 0; i < headers.length; i++) {
                Cell cell = headerRow.createCell(i);
                cell.setCellValue(headers[i]);
                cell.setCellStyle(createHeaderCellStyle(workbook));
            }

            // 填充数据
            for (int i = 0; i < data.size(); i++) {
                Row row = sheet.createRow(i + 1);
                String[] rowData = data.get(i);
                for (int j = 0; j < rowData.length; j++) {
                    row.createCell(j).setCellValue(rowData[j]);
                }
            }

            // 自动调整列宽
            for (int i = 0; i < headers.length; i++) {
                sheet.autoSizeColumn(i);
            }

            workbook.write(out);
            return out;
        } catch (IOException e) {
            throw new RuntimeException("导出Excel失败", e);
        }
    }

    private static CellStyle createHeaderCellStyle(Workbook workbook) {
        CellStyle style = workbook.createCellStyle();
        Font font = workbook.createFont();
        font.setBold(true);
        style.setFont(font);
        return style;
    }
}

创建导出服务

定义好表格工具类之后,接下来需要再业务层中定义一个业务操作类,通过这个业务操作类将数据库中的数据导出到Excel文件操作中,如下所示,这里我们模拟了数据库读取的数据,实际的操作中,我们可以通过整合ORM框架将数据库中的数据进行组合。

import org.springframework.stereotype.Service;
import java.util.Arrays;
import java.util.List;

@Service
public class ExcelExportService {

    public ByteArrayOutputStream generateExcel() {
        // 模拟数据
        String[] headers = {"ID", "Name", "Age", "Email"};
        List<String[]> data = Arrays.asList(
                new String[]{"1", "Alice", "23", "alice@example.com"},
                new String[]{"2", "Bob", "30", "bob@example.com"},
                new String[]{"3", "Charlie", "28", "charlie@example.com"}
        );

        return ExcelExportUtil.exportToExcel(data, headers);
    }
}

创建控制器提供Excel下载接口

完成业务层开发之后,接下来就是控制层的数据获取以及下载操作,我们可以通过HTTP请求实现Excel的文件导出下载的功能如下所示。

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

    @Autowired
    private ExcelExportService excelExportService;

    @GetMapping("/excel")
    public ResponseEntity<byte[]> exportExcel() {
        ByteArrayOutputStream outputStream = excelExportService.generateExcel();
        
        return ResponseEntity.ok()
                .header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=export.xlsx")
                .contentType(MediaType.APPLICATION_OCTET_STREAM)
                .body(outputStream.toByteArray());
    }
}

总结

这样我们就可以启动应用程序来调用这个接口,就可以实现Excel文件的导出下载工作了,当然在实际的工作中,我们可以选择的方式还有很多,当然有兴趣的读者也可以基于上面的例子实现更高级的扩展,有问题可以在评论区留言,我们一起来讨论。

相关文章

【干货】如何使用Java实现百万数据的Excel导出功能?

Java作为一种常用的编程语言,在实现大量数据导出功能时具有很高的效率和可扩展性。本文将介绍如何使用Java实现百万数据的Excel导出功能。一、需求分析在很多实际应用场景中,我们需要将大量数据导出到...

原来用hutool导入导出Excel这么丝滑!

1. hutool 工具介绍unset这个我就不用过多介绍了,它是一个非常好用的 Java 工具类库。我们在日常工作中用到的工具类,他都有。官网:https://plus.hutool.cn/ uns...

用的处理excel导入导出的Java类库和工具包有哪些

常用的处理excel导入导出的Java类库和工具包有以下几种:Apache POI:一款流行的用于读写Microsoft Office格式文件的Java库。它能够读写Excel、Word和PowerP...

Springboot+Easyexcel将数据写入模板文件并导出Excel

Java解析、生成Excel比较有名的框架有Apache poi、jxl。但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题,但POI还是有...

多人同时导出 Excel 干崩服务器!参考阿里大佬给出的解决方案

前言业务诉求:考虑到数据库数据日渐增多,导出会有全量数据的导出,多人同时导出可以会对服务性能造成影响,导出涉及到mysql查询的io操作,还涉及文件输入、输出流的io操作,所以对服务器的性能会影响的比...

Excel导出,Excel模板导出Excel导入,Word模板导出神器-Easypoi

概述Easypoi 是码云上的一个开源项目。项目开发组织是Lemur开源。目前属于码云最有价值开源项目。Easypoi 是对poi的封装,其主打的功能就是容易,让一个没见接触过poi的人员 就可以方便...