导出文件 EasyExcelUtil

指定包:import com.opencloud.kamaitachi.server.utils.EasyExcelUtil;

EasyExcelUtil.writeSingleExcel("文件名","表名","要写的内容集合","要写的内容类")
例如:
EasyExcelUtil.writeSingleExcel(
 PostedPositionExcelConvert.getFileNmae(query.getType()),                                     PostedPositionExcelConvert.getFileNmae(query.getType()), 
 kamaitachiPositedWorkerExcel,
 KamaitachiPositedWorkerExcelVO.class);
源码:
 public static <T> String writeSingleExcel(
    String fileName, String sheetName, List<T> tList, Class tClass
    )

1.1 工作中的操作

@ApiOperation(value = "导出已浏览、已收藏、已投递职位列表", notes = "导出已浏览、已收藏、已投递职位列表")
    @PostMapping(value = "/exportPostedPositionExcel")
    public ResultBody<String> exportWorkerInfoExcel(@RequestBody KamaitachiPostedPositionConditionDTO query) throws IOException {
        if(query.getChoseDateRange() != null && query.getChoseDateRange() != 0){
            query.setBeginAndEndDate();
        }
        if(Objects.nonNull(query.getMinAge())){
            query.setMinAgeTime(ageToDate(query.getMinAge()));
        }
        if(Objects.nonNull(query.getMaxAge())){
            query.setMaxAgeTime(ageToDate(query.getMaxAge()));
        }
        List<KamaitachiPositedWorkerExcelVO> kamaitachiPositedWorkerExcel = new ArrayList<>();
        List<KamaitachiPositedWorkerVO> list = kamaitachiPostedPositionService.listKamaitachiPositedWorkerVO(query);
        if(list != null && list.size() >0){
            for (KamaitachiPositedWorkerVO kamaitachiPositedWorkerVO:list) {
                KamaitachiPositedWorkerExcelVO kamaitachiPositedWorkerExcelVO = new KamaitachiPositedWorkerExcelVO();
                BeanUtils.copyProperties(kamaitachiPositedWorkerVO, kamaitachiPositedWorkerExcelVO);
                kamaitachiPositedWorkerExcel.add(kamaitachiPositedWorkerExcelVO);
            }
        }
        PostedPositionExcelConvert.getFileNmae(query.getType());
        String downLoadFileName = EasyExcelUtil.writeSingleExcel(PostedPositionExcelConvert.getFileNmae(query.getType()), PostedPositionExcelConvert.getFileNmae(query.getType()), kamaitachiPositedWorkerExcel, KamaitachiPositedWorkerExcelVO.class);
        return ResultBody.ok(downLoadFileName);
    }

最近完成任务的时候遇到此类数据报表导出问题,因为是前面离职大佬写的,我接手了他的任务。一开始这个任务比较重要且繁多复杂,他在离职前并没有把他全部写好完善好,以至于后面留了很多的bug需要更正修改,同时没做太多的注释说明。刚接手他代码的会比较吃力,但他的思考角度是值得我学习的,他不足的地方也在学习中完善。

1.1.1、前提准备:Excel报表类

为了利用列表数据对Excel数据报表进行赋值,所以务必保证属性和列表类的属性一致,利用BeanUtils.copyProperties(a,b)进行复制赋值,报表类中的属性在数据列表属性中有的话就会覆盖赋值。

利用注解@ExcelProperty("昵称")

示例:Excel报表类中属性

@ExcelProperty("昵称")
private String nickName;
@ExcelProperty("姓名")
private String name;

1.1.2、利用先前列表数据对Excel报表类进行逐一赋值

他是利用先前的列表数据,对iPageResultBody(数据列表)将值进行逐一遍历赋值给Excel报表类属性

ResultBody<Page<KamaitachiWorkerInfoDTO>> iPageResultBody = this.list(query);
List<Object> poList = iPageResultBody.getData().getRecords().stream()
        .map(kamaitachiWorkerInfoDTO -> {
            WorkerInfoPO workerInfoPO = new WorkerInfoPO();
            BeanUtils.copyProperties(kamaitachiWorkerInfoDTO,workerInfoPO);
            ......//(1.1.3)
             return workerInfoPO;
                })
                .collect(Collectors.toList());

1.1.3、对于列表中没有的数据进行设置赋值

对于Excel报表类中特别的数据属性,比如性别,列表给的是1男2女,但在给报表赋值的时候需要变成男女,这时候需要对这些值进行设置赋值

//性别
workerInfoPO.setSex(SexEnum.getSexName(kamaitachiWorkerInfoDTO.getSex()));
//拥有证件
List<KamaitachiWorkerFiles> personalCardFilesList = kamaitachiWorkerInfoDTO.getPersonalCardFilesList();
if(personalCardFilesList != null && personalCardFilesList.size()>0){
    StringBuilder sbWorkerFiles = new StringBuilder();
    for (KamaitachiWorkerFiles kamaitachiWorkerFiles : personalCardFilesList) {
        if(StringUtil.isNotEmpty(kamaitachiWorkerFiles.getFileUrl())){
            sbWorkerFiles.append(kamaitachiWorkerFiles.getCredentialsName()).append('、');
        }
    }
    workerInfoPO.setPersonalCardFiles(sbWorkerFiles.toString());
}
 //实名认证
 workerInfoPO.setIsRealname(RealnameStatusEnum.getName(kamaitachiWorkerInfoDTO.getIsRealname()));
 //利用字典转换学历,须+1
 Integer highestEducationCode = kamaitachiWorkerInfoDTO.getHighestEducationCode();
 if(highestEducationCode != null && highestEducationCode >0){
 if(StringUtil.isNotEmpty(SysDictParseUtil.parseSingleDictValue("KAMA_EDUCATION_REQUIRE",highestEducationCode+1))){   workerInfoPO.setHighestEducationName(SysDictParseUtil.parseSingleDictValue("KAMA_EDUCATION_REQUIRE",highestEducationCode+1));
     }else{
         workerInfoPO.setHighestEducationName("");
     }
 }

①这里利用了枚举类进行转换

public enum RealnameStatusEnum {

    NO_REALNAME(0, "未实名"),
    YES_REALNAME(1, "已实名"),
    ;

    private Integer code;
    private String msg;

    RealnameStatusEnum(Integer code, String msg) {
        this.code = code;
        this.msg = msg;
    }

    public Integer getCode() {
        return code;
    }

    public String getMsg() {
        return msg;
    }

    public static String getName(Integer code) {
        for (RealnameStatusEnum type : RealnameStatusEnum.values()) {
            if (type.getCode().equals(code)) {
                return type.msg;
            }
        }
        return "";
    }
}

②利用数据字典进行转换

前提系统存在这个字典"KAMA_EDUCATION_REQUIRE"

示例:SysDictParseUtil.parseSingleDictValue("KAMA_EDUCATION_REQUIRE",highestEducationCode);
源码:SysDictParseUtil.parseSingleDictValue(dictType,dictCode);

1.1.4 利用EasyExcelUtil导出数据

String downLoadFileName = EasyExcelUtil.writeSingleExcel("服务人员导出", "服务人员导出", poList, WorkerInfoPO.class);
return ResultBody.ok(downLoadFileName);

1.1.5 总体示例

@ApiOperation(value = "服务人员导出", notes = "服务人员导出")
@PostMapping(value = "/exportWorkerInfoExcel")
public ResultBody<String> exportWorkerInfoExcel(@RequestBody WorkerInfoPageDto query) throws IOException {
   // ResultBody<Page<KamaitachiWorkerInfoDTO>> iPageResultBody = this.list(query);
    ResultBody<Page<KamaitachiWorkerInfoDTO>> iPageResultBody = this.list(query);
    List<Object> poList = iPageResultBody.getData().getRecords().stream()
            .map(kamaitachiWorkerInfoDTO -> {
                WorkerInfoPO workerInfoPO = new WorkerInfoPO();
                BeanUtils.copyProperties(kamaitachiWorkerInfoDTO,workerInfoPO);
​
                //拥有证件
                List<KamaitachiWorkerFiles> personalCardFilesList = kamaitachiWorkerInfoDTO.getPersonalCardFilesList();
                if(personalCardFilesList != null && personalCardFilesList.size()>0){
                    StringBuilder sbWorkerFiles = new StringBuilder();
                    for (KamaitachiWorkerFiles kamaitachiWorkerFiles : personalCardFilesList) {
                        if(StringUtil.isNotEmpty(kamaitachiWorkerFiles.getFileUrl())){
                            sbWorkerFiles.append(kamaitachiWorkerFiles.getCredentialsName()).append('、');
                        }
                    }
                    workerInfoPO.setPersonalCardFiles(sbWorkerFiles.toString());
                }
                //性别
                workerInfoPO.setSex(SexEnum.getSexName(kamaitachiWorkerInfoDTO.getSex()));
                //实名认证
                workerInfoPO.setIsRealname(RealnameStatusEnum.getName(kamaitachiWorkerInfoDTO.getIsRealname()));
                //利用字典转换学历,须+1
                Integer highestEducationCode = kamaitachiWorkerInfoDTO.getHighestEducationCode();
               /* Map<String, String> highestEducationMap = sysdictUtil.getSysdict("KAMA_EDUCATION_REQUIRE","")
                        .entrySet().stream().collect(Collectors.toMap(Map.Entry::getValue, Map.Entry::getKey));*/
                if(highestEducationCode != null && highestEducationCode >0){
                    if(StringUtil.isNotEmpty(SysDictParseUtil.parseSingleDictValue("KAMA_EDUCATION_REQUIRE",highestEducationCode+1))){
                        workerInfoPO.setHighestEducationName(SysDictParseUtil.parseSingleDictValue("KAMA_EDUCATION_REQUIRE",highestEducationCode+1));
                    }else{
                        workerInfoPO.setHighestEducationName("");
                    }
                }
                return workerInfoPO;
            })
            .collect(Collectors.toList());
    String downLoadFileName = EasyExcelUtil.writeSingleExcel("服务人员导出", "服务人员导出", poList, WorkerInfoPO.class);
    return ResultBody.ok(downLoadFileName);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

饼干大怪兽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值