springboot中使用easyExcel读取excel中的内容

在Spring Boot中使用easyExcel库可以非常简便地将本地Excel文件内容读取并存入Java对象列表中。easyExcel是一个基于Apache POI但更加简洁易用的库,它专注于性能和内存占用的优化。

首先,你需要在pom.xml中添加easyExcel的依赖(如果你使用Maven):

<dependency>
    <groupId>com.alibabagroupId>
    <artifactId>easyexcelartifactId>
    <version>最新版本version> 
dependency>

然后,创建一个Java对象(DTO)来表示Excel文件中的数据行:

import com.alibaba.excel.annotation.ExcelProperty;

public class DataRow {

    @ExcelProperty("列1标题")
    private String column1;

    @ExcelProperty("列2标题")
    private String column2;

    // 省略getter和setter方法
}

在上面的代码中,@ExcelProperty注解用于指定Excel列与Java对象字段之间的映射关系。

接下来,编写一个服务类来读取Excel文件并将其内容转换为Java对象列表:

import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.read.listener.ReadListener;
import com.alibaba.excel.read.metadata.ReadSheet;

import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

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

@Service
public class ExcelService {

    public List<DataRow> readExcel(MultipartFile file) throws IOException {
        List<DataRow> dataRows = new ArrayList<>();
        EasyExcel.read(file.getInputStream(), DataRow.class, new ReadListener<DataRow>() {
            @Override
            public void invoke(DataRow dataRow, ReadContext context) {
                dataRows.add(dataRow);
            }

            @Override
            public void doAfterAllAnalysed(ReadContext context) {
                // 所有数据解析完成后会调用此方法,可以在这里执行后续操作
            }
        }).sheet().doRead(); // 这里指定了读取所有sheet,可以根据需要指定sheet

        return dataRows;
    }
}

注意:在实际生产代码中,你可能需要处理更大的Excel文件,而上面的代码示例在内存使用方面可能不是最优的。easyExcel提供了一个基于事件的API来处理大数据量,以避免内存溢出。在这个例子中,我们简化了代码以便于理解,但对于大数据量,你应该使用ExcelReaderReadListener的异步读取方式。

最后,在控制器中调用这个服务来处理文件上传:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

@RestController
public class ExcelController {

    @Autowired
    private ExcelService excelService;

    @PostMapping("/upload")
    public List<DataRow> uploadExcel(@RequestParam("file") MultipartFile file) throws IOException {
        return excelService.readExcel(file);
    }
}

这样,当前端上传Excel文件到/upload端点时,后端会读取文件内容,将其转换为DataRow对象列表,并返回给前端。记得在前端HTML中设置一个表单来上传文件,如之前的例子所示。

你可能感兴趣的:(spring,boot,excel,后端)