在 Spring 项目里实现 Excel 文件的读写,可借助 Apache POI 或 EasyExcel 这两个常用的工具库。下面分别介绍这两种实现方式。

使用 Apache POI 实现 Excel 读写

1. 添加依赖

若使用 Maven 项目,需在 pom.xml 中添加如下依赖:

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

2. 读取 Excel 文件

以下是一个简单的读取 Excel 文件的示例:

ExcelReader.java

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

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

public class ExcelReader {
    public static void readExcel(String filePath) throws IOException {
        try (FileInputStream file = new FileInputStream(new File(filePath));
             Workbook workbook = new XSSFWorkbook(file)) {

            Sheet sheet = workbook.getSheetAt(0);
            for (Row row : sheet) {
                for (Cell cell : row) {
                    switch (cell.getCellType()) {
                        case STRING:
                            System.out.print(cell.getStringCellValue() + "\t");
                            break;
                        case NUMERIC:
                            if (DateUtil.isCellDateFormatted(cell)) {
                                System.out.print(cell.getDateCellValue() + "\t");
                            } else {
                                System.out.print(cell.getNumericCellValue() + "\t");
                            }
                            break;
                        case BOOLEAN:
                            System.out.print(cell.getBooleanCellValue() + "\t");
                            break;
                        case FORMULA:
                            System.out.print(cell.getCellFormula() + "\t");
                            break;
                        default:
                            System.out.print("\t");
                    }
                }
                System.out.println();
            }
        }
    }
}    

3. 写入 Excel 文件

以下是一个简单的写入 Excel 文件的示例:

ExcelWriter.java

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

import java.io.FileOutputStream;
import java.io.IOException;

public class ExcelWriter {
    public static void writeExcel(String filePath) throws IOException {
        try (Workbook workbook = new XSSFWorkbook();
             FileOutputStream fileOut = new FileOutputStream(filePath)) {

            Sheet sheet = workbook.createSheet("Sheet1");
            Row headerRow = sheet.createRow(0);
            String[] headers = {"Name", "Age", "Email"};
            for (int i = 0; i < headers.length; i++) {
                Cell cell = headerRow.createCell(i);
                cell.setCellValue(headers[i]);
            }

            Row dataRow = sheet.createRow(1);
            dataRow.createCell(0).setCellValue("John Doe");
            dataRow.createCell(1).setCellValue(30);
            dataRow.createCell(2).setCellValue("johndoe@example.com");

            workbook.write(fileOut);
        }
    }
}    

使用 EasyExcel 实现 Excel 读写

1. 添加依赖

若使用 Maven 项目,需在 pom.xml 中添加如下依赖:

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
    <version>3.1.1</version>
</dependency>

2. 定义数据模型

import com.alibaba.excel.annotation.ExcelProperty;

public class User {
    @ExcelProperty("Name")
    private String name;

    @ExcelProperty("Age")
    private Integer age;

    @ExcelProperty("Email")
    private String email;

    // Getters and Setters
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}

3. 读取 Excel 文件

import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;

import java.util.ArrayList;
import java.util.List;

public class EasyExcelReader {
    public static List<User> readExcel(String filePath) {
        List<User> userList = new ArrayList<>();
        EasyExcel.read(filePath, User.class, new AnalysisEventListener<User>() {
            @Override
            public void invoke(User user, AnalysisContext analysisContext) {
                userList.add(user);
            }

            @Override
            public void doAfterAllAnalysed(AnalysisContext analysisContext) {
                System.out.println("Reading completed.");
            }
        }).sheet().doRead();
        return userList;
    }
}

4. 写入 Excel 文件

import com.alibaba.excel.EasyExcel;

import java.util.ArrayList;
import java.util.List;

public class EasyExcelWriter {
    public static void writeExcel(String filePath) {
        List<User> userList = new ArrayList<>();
        User user = new User();
        user.setName("John Doe");
        user.setAge(30);
        user.setEmail("johndoe@example.com");
        userList.add(user);

        EasyExcel.write(filePath, User.class).sheet("Sheet1").doWrite(userList);
    }
}

总结

  • Apache POI:功能强大,能对 Excel 文件进行细致的操作,不过代码相对复杂。
  • EasyExcel:使用简便,代码简洁,性能优良,适合快速开发。你可依据项目的具体需求来选择合适的工具库。