web请求,excel导入与导出

1.使用插件阿里提供的easyexcel 官网链接:https://github.com/alibaba/easyexcel
2.文件名称乱码问题解决
3.这里的示例–同步上传和下载,阿里的插件也支持异步写入
4.最重要的是使用简单,只需一到两行代码即可

依赖:

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

web请求,excel上传

controller:

    @ApiOperation("使用excel批量创建用户")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "header", name = RequestConstants.AUTHORIZATION, dataType = "String", required = true, value = "用户token")
    })
    @PostMapping(value = "/api/user-service/users")
    public CommonResult<String> createUsers(@RequestBody MultipartFile file) {
        return CommonResult.ok(userService.addUsersFromFile(file));
    }

service:
一行代码就可以解决excel上传解析为对象列表
EasyExcel.read(file.getInputStream()).head(ImportUser.class).sheet().doReadSync();

  public String addUsersFromFile(MultipartFile file) {
        List<User> list = null;
        try {
            list = EasyExcel.read(file.getInputStream()).head(ImportUser.class).sheet().doReadSync();
        } catch (IOException e) {
            log.error("file read error", e);
            throw new PlatformException(ErrorCode.FILE_READ_ERROR);
        }
        if (CollectionUtils.isEmpty(list)) {
            return "文件没有数据";
        }
        for (User data : list) {
            log.info("读取到数据:{}", JSON.toJSONString(data));
            try {
                UserAddRequest userAddRequest = new UserAddRequest();
                userAddRequest.setUsername(data.getUsername());
                userAddRequest.setCellphone(data.getCellphone());
                userAddRequest.setRole(UserRole.getRoleByName(data.getRole()).getRoleType());
                userAddRequest.setJob(data.getJob());
                userAddRequest.setCompany(data.getCompany());
                addUser(userAddRequest);
            } catch (PlatformException e) {
                return data.getUsername() + "-" + data.getCellphone() + ":" + e.getMessage();
            } catch (Exception e) {
                return data.getUsername() + "-" + data.getCellphone() + ":" + "该条数据插入失败,请重试";
            }
        }
        return "批量用户创建成功";
    }

web请求,excel导出

controller:

    @ApiOperation("学生学期成绩导出")
    @GetMapping("/api/service/terms/{termId}/result/export")
    public void exportTermStudents(@PathVariable Long termId, HttpServletResponse response) {
        termService.exportTermStudents(termId, response);
    }

service:

文件乱码解决:
response.setHeader(“Content-disposition”, “attachment;filename*=utf-8’’” + fileName + “.xlsx”);

针对不是固定head的可以自定义head:
EasyExcel.write(response.getOutputStream()).head(head).sheet() .doWrite(data);
固定head的:
EasyExcel.write(response.getOutputStream(),Data.class).sheet().doWrite(data);

    public void exportTermStudents(Long termId, HttpServletResponse response) {
        String termName="测试学期名称导出";
        List<Performance> performances=Lists.newArrayList();// 具体数据来源逻辑--自行写入
        response.setContentType("application/x-xls; charset=UTF-8");
        // 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
        String fileName = null;
        try {
            fileName = URLEncoder.encode(termName + "成绩单", "UTF-8");
        } catch (UnsupportedEncodingException e) {
            log.error("file name is error");
        }
        response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
        try {
            EasyExcel.write(response.getOutputStream()).head(head).sheet()
                    .doWrite(performances);
        } catch (IOException e) {
            e.printStackTrace();
        }
        
    }
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值