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

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

在一些企业级的应用中,对于数据导出成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文件的导出下载工作了,当然在实际的工作中,我们可以选择的方式还有很多,当然有兴趣的读者也可以基于上面的例子实现更高级的扩展,有问题可以在评论区留言,我们一起来讨论。

相关文章

Hutool Java工具类库导出Excel,超级简单

作者:程序猿的内心独白原文链接:http://suo.im/5Zxx2L前言在开发应用系统的时候,导出文件是必不可放的功能。以前用过POI、easyexcel等工具的导入导出功能,但总感觉太麻烦了,代...

java将百万级别数据导出到Excel中,用时仅需要98941毫秒

程序员创业记跟大家分享一款Excel组件,之所以分享这款,是因为它在处理excel时很方便,我将百万数据导出到excel,耗时仅不用两分钟。poi概述Apache POI是Apache软件基金会的开放...

盘点三种Excel转SHP文件的方法(附练习数据下载)

概述数据的获取渠道是多种多样的,获取的数据格式也是多种多样,作为一名GISer,需要熟练掌握各种格式的数据之间的转换,例如本文要介绍的Excel格式的数据,经常会遇到,如果需要转换为SHP格式应该怎么...

【Java技巧】高效数据传输:Java通过绑定快速将数据导出至Excel

前言把数据导出至 Excel 是很常见的需求,而数据的持久化,往往又放在数据库中。因此把数据库中的数据导出到 Excel中,成了非常普遍的一个需求。以关系型数据库为例,数据表是一个二维矩阵,但是为了易...

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

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

java bean 一对多,多对一 poi导出excel表格

最近造了个poi导出 excel轮子特点java bean 一对多、多对一关系合并单元行支持图片导出Bean 一对多关系合并行代码public class User { @Excel(nam...