您的位置:

使用Spring Boot实现Excel文件数据导入和导出功能

一、导入和导出功能介绍

Excel表格是一个普遍的业务数据存储和交换方式,因此对于企业管理系统和业务系统来说,Excel文件的导入和导出功能是必不可少的。本文将介绍如何在Spring Boot应用中使用Apache POI库实现Excel文件的导入和导出功能。

二、导入Excel文件

1.导入流程概述

实现导入Excel文件需要按照以下步骤进行:

1)客户端上传Excel文件;

2)服务端读取Excel文件;

3)将Excel文件中的数据解析成Java对象;

4)将Java对象保存到数据库中。

2.代码实现

首先,需要在pom.xml文件中添加Apache POI库的依赖。完成之后,需要在Controller中编写导入Excel文件的代码。示例如下:


@PostMapping("/import")
public void importExcel(@RequestParam("file") MultipartFile file) {
    try {
        Workbook workbook = new XSSFWorkbook(file.getInputStream());
        Sheet sheet = workbook.getSheetAt(0);
        List<MyObject> list = new ArrayList<>();
        for (Row row : sheet) {
            MyObject obj = new MyObject();
            obj.setProp1(row.getCell(0).getStringCellValue());
            obj.setProp2(row.getCell(1).getStringCellValue());
            obj.setProp3(row.getCell(2).getDateCellValue());
            list.add(obj);
        }
        myService.saveAll(list);
    } catch (IOException e) {
        e.printStackTrace();
    }
}

上述代码中,首先获取上传的Excel文件,再将其转换为Workbook对象。其中,XSSFWorkbook用于处理.xlsx文件,而HSSFWorkbook用于处理.xls文件。通过getSheetAt(0)方法获取Excel中的第一个Sheet,通过遍历Sheet的所有行,将每一行的数据转换为Java对象,并最终将所有的Java对象保存到数据库中。

三、导出Excel文件

1.导出流程概述

实现导出Excel文件需要按照以下步骤进行:

1)从数据库中获取需要导出的数据;

2)将数据转换为Excel文件中的行和列;

3)生成Excel文件。

2.代码实现

下面给出导出Excel文件的示例代码,其中使用了Apache POI库中的XSSFWorkbook类:


@GetMapping("/export")
public ResponseEntity<ByteArrayResource> exportExcel() {
    List<MyObject> list = myService.getAll();
    try (ByteArrayOutputStream bos = new ByteArrayOutputStream();
          XSSFWorkbook workbook = new XSSFWorkbook()) {
        CreationHelper creationHelper = workbook.getCreationHelper();
        Sheet sheet = workbook.createSheet("My Sheet");
        Row headerRow = sheet.createRow(0);
        headerRow.createCell(0).setCellValue("Prop1");
        headerRow.createCell(1).setCellValue("Prop2");
        headerRow.createCell(2).setCellValue("Prop3");
        int rowNumber = 1;
        for (MyObject obj : list) {
            Row row = sheet.createRow(rowNumber++);
            row.createCell(0).setCellValue(obj.getProp1());
            row.createCell(1).setCellValue(obj.getProp2());
            Cell dateCell = row.createCell(2);
            dateCell.setCellValue(obj.getProp3());
            dateCell.setCellStyle(createDateCellStyle(workbook, creationHelper));
        }
        workbook.write(bos);
        ByteArrayResource resource = new ByteArrayResource(bos.toByteArray());
        return ResponseEntity.ok()
                .header(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=myfile.xlsx")
                .contentType(MediaType.APPLICATION_OCTET_STREAM)
                .contentLength(resource.contentLength())
                .body(resource);
    } catch (IOException e) {
        e.printStackTrace();
        return ResponseEntity.badRequest().build();
    }
}

private CellStyle createDateCellStyle(XSSFWorkbook workbook, CreationHelper creationHelper) {
    CellStyle dateCellStyle = workbook.createCellStyle();
    dateCellStyle.setDataFormat(creationHelper.createDataFormat().getFormat("yyyy-MM-dd HH:mm:ss"));
    return dateCellStyle;
}

上述代码中,首先获取需要导出的数据,然后创建XSSFWorkbook对象,并创建Sheet和Header Row。通过遍历数据,将每一行的数据转换为Excel文件中的行和列,并设置单元格的格式。

四、总结

通过使用Apache POI库,可以方便地实现Spring Boot应用中的Excel文件的导入和导出功能,极大地提高了业务系统的数据交互效率。