【Excel】使用 SpringBoot 实现 Excel 文件的导入与导出

为了大家能更好地理解这篇博文,在看之前,建议去看看我的上一篇博文:【File】使用 SpringBoot 实现文件的上传与下载。因为,这篇博文是在上一篇博文基础之上继续开发的。

这两篇博文互有联系:文件的导入就是文件的上传;文件的导出就是文件的下载。

至于为什么是 导入/导出 Excel 文件呢?因为 Excel 文件用的频率更多吧。顺便来复习下通过 EasyExcel 来操作 Excel 文件。

编码思路:

Excel 导入:

  1. 浏览文件夹,选择需要上传的 Excel 文件,这里使用 POSTMAN 工具;
  2. 将本地文件上传至服务器指定位置;
  3. 服务器解析Excel文件;
  4. 将Excel中解析的数据存入数据库中。

Excel 导出

  1. 设定查询条件;
  2. 数据库中查询相应的数据 ;
  3. 将数据写入Excel;
  4. 将 Excel 下载至本地。

导入 POM 依赖:

<dependency>
  <groupId>com.alibaba</groupId>
  <artifactId>easyexcel</artifactId>
  <version>2.0.0-beta2</version>
</dependency>

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.5</version>
</dependency>

1. Excel 导入

FileController:添加一个导入接口

@RestController
@RequestMapping("/file")
public class FileController {

    @Autowired
    private FileService fileService;

    @PostMapping("/importExcel")
    public ResultVo importExcel(@RequestParam("file") MultipartFile excel) {
        return fileService.importExcel(excel);
    }

}

FileServiceImpl

@Service
@Slf4j
public class FileServiceImpl implements FileService {

    @Autowired
    private ExcelUtil excelUtil;

    @Override
    public ResultVo importExcel(MultipartFile file) {
        // 1.入参校验
        ResultVo<String> checkExcelParam = checkExcelParam(file);
        if (!checkExcelParam.checkSuccess()) {
            log.error(checkExcelParam.getMsg());
            return checkExcelParam;
        }
        // 2.上传至服务器某路径下
        ResultVo resultVo = uploadFile(file);
        if (!resultVo.checkSuccess()) {
            return resultVo;
        }
        String filePath = (String)resultVo.getData();
        if (StringUtil.isBlank(filePath)) {
            return ResultVoUtil.error("【导入Excel文件】生成的Excel文件的路径为空");
        }
        // 3.读取excel文件
        List<ExcelVo> excelVos = excelUtil.simpleExcelRead(filePath, ExcelVo.class);
        if (CollectionUtil.isEmpty(excelVos) || excelVos.size() < 2) {
            log.error("【导入Excel文件】上传Excel文件{}为空", file.getOriginalFilename());
            return ResultVoUtil.error("上传Excel文件为空");
        }
        // 4.通过线程池开启一个线程去执行数据库操作,主线程继续往下执行
        // 4.1开启一个线程
        TaskCenterUtil taskCenterUtil = TaskCenterUtil.getTaskCenterUtil();
        taskCenterUtil.submitTask(() -> {
            log.info("【批量添加】批量添加数据:{}", JSON.toJSONString(excelVos));
            return null;
        });
        // 4.2删除临时文件
        boolean deleteFile = FileUtil.deleteFile(new File(filePath));
        if (!deleteFile) {
            log.error("【导入Excel文件】删除临时文件失败,临时文件路径为{}", filePath);
            return ResultVoUtil.error("删除临时文件失败");
        }
        log.info("【导入Excel文件】删除临时文件成功,临时文件路径为:{}", filePath);
        return ResultVoUtil.success(excelVos);
    }
    
}

说明:

  1. List<ExcelVo> excelVos = excelUtil.simpleExcelRead(filePath, ExcelVo.class); 你给我一个Excel文件路径,和一个数据类型,我就能将这个Excel文件中的数据封装成一个集合,并返回给你;
  2. TaskCenterUtil taskCenterUtil = TaskCenterUtil.getTaskCenterUtil();获取了一个线程池;taskCenterUtil.submitTask() 另开启了一个新线程去执行其它操作;原来的线程继续往下执行

  • 4
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值