使用easyexcel上传并读取excel内容

本文介绍了一种使用Java从MultipartFile中读取Excel文件的方法,并展示了如何将MultipartFile转换为File对象,以便进一步处理Excel数据。
 public ResponseData readExcel(MultipartFile file) throws Exception {
        if (null == file) {
            throw new ServiceException(FILE_NOT_FOUND);
        }
        Sheet sheet = new Sheet(1, 1, ClanExcelVo.class);
        InputStream fileInputStream = new FileInputStream(multipartFileToFile(file));
        List<Object> read1 = EasyExcelFactory.read(fileInputStream, sheet);
        // 存 ExcelMode 实体的 集合
        List<ClanExcelVo> list = new ArrayList<ClanExcelVo>();
        for (Object o : read1) {
            list.add((ClanExcelVo) o);
        }
        return ResponseData.success(list);
    }

下面是将MultipartFile转file

public static File multipartFileToFile(MultipartFile file) throws Exception {
        File toFile = null;
        if (file.equals("") || file.getSize() <= 0) {
            file = null;
        } else {
            InputStream ins = null;
            ins = file.getInputStream();
            toFile = new File(file.getOriginalFilename());
            inputStreamToFile(ins, toFile);
            ins.close();
        }
        return toFile;
    }

    public static void inputStreamToFile(InputStream ins, File file) {
        try {
            OutputStream os = new FileOutputStream(file);
            int bytesRead = 0;
            byte[] buffer = new byte[8192];
            while ((bytesRead = ins.read(buffer, 0, 8192)) != -1) {
                os.write(buffer, 0, bytesRead);
            }
            os.close();
            ins.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
### 使用EasyExcel读取Excel文件转换为List返回给前端 要通过 `EasyExcel` 库将 Excel 文件中的数据读取到内存中,将其作为 List 返回给前端,可以按照以下方式实现: #### 1. 定义实体类 首先定义一个与 Excel 表格结构对应的 Java 实体类。假设表格中有两列:用户名 (`username`) 和年龄 (`age`)。 ```java public class User { private String username; private Integer age; // Getters and Setters public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } } ``` #### 2. 编写读取方法 使用 `EasyExcel.read()` 方法来读取 Excel 数据,将其存储在一个列表中。 ```java import com.alibaba.excel.EasyExcel; import java.util.List; public class ExcelReader { public static List<User> readExcel(String fileName) { // 创建一个返回对象 final List<User> userList = new ArrayList<>(); // 调用 EasyExcel读取功能 EasyExcel.read(fileName, User.class, new AnalysisEventListener<User>() { @Override public void invoke(User user, AnalysisContext analysisContext) { userList.add(user); // 将每一行的数据加入到 list 中 } @Override public void doAfterAllAnalysed(AnalysisContext analysisContext) { // 所有数据解析完成后的操作 } }).sheet().doRead(); return userList; // 返回最终的用户列表 } } ``` #### 3. 控制器部分 在 Spring Boot 或其他框架下的控制器中调用该方法将结果返回给前端。 ```java @RestController @RequestMapping("/api/excel") public class ExcelController { @PostMapping("/read") public ResponseEntity<List<User>> readExcel(@RequestParam("file") MultipartFile file) throws IOException { try (InputStream inputStream = file.getInputStream()) { // 获取临时文件路径 File tempFile = Files.createTempFile("temp_excel_", ".xlsx").toFile(); file.transferTo(tempFile); // 调用工具类的方法读取 Excel 转成 List List<User> users = ExcelReader.readExcel(tempFile.getAbsolutePath()); // 删除临时文件 tempFile.delete(); // 返回 JSON 格式的响应 return ResponseEntity.ok(users); } catch (Exception e) { return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(null); } } } ``` 以上代码实现了从前端上传 Excel 文件,后台利用 `EasyExcel` 解析其内容至 `User` 对象集合,以 JSON 形式返回给前端的功能[^1]。 ### 注意事项 - 需要在项目中引入 `easyexcel` 依赖项。 - 如果表头名称不匹配字段名,则需配置映射关系或者自定义注解处理。 - 处理大文件时应考虑性能优化以及分页加载策略。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值