专业的JAVA编程教程与资源

网站首页 > java教程 正文

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

temp10 2025-01-19 00:13:21 java教程 9 ℃ 0 评论

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

引入依赖

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

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

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

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表