Fork me on GitHub

根据自选择字段导出数据成excel文件

根据自选择字段导出数据成excel文件

在项目开发中有一项需求是,用户根据自己的需要选择字段,把数据导成excel文件。这里用到了反射进行实现。

  1. 核心代码类

    @Slf4j
    public class ExcelUtils<T> {
    
        //resultMap:要写入excel文件的数据集合
        //fieldList:被选择导出的字段
        //infoVoList:总数据集合
        public void getExcel(List<Map<String, Object>> resultMap, List<String> fieldList, List<T> infoVoList) {
            for (T infoVo : infoVoList) {
                Map<String, Object> item = new HashMap<>();
                for (String fieldName : fieldList) {
                    try {
                        String fieldAlias = SourceAndFieldEnum.filedDb(fieldName);
                        //字段反射
                        PropertyDescriptor descriptor = new PropertyDescriptor(fieldAlias, infoVo.getClass());
                        //取字段的get方法
                        Method readMethod = descriptor.getReadMethod();
                        //执行get方法进行取值
                        Object o = readMethod.invoke(infoVo);
                        item.put(fieldName, o);
                    } catch (Exception e) {
                        log.error("excel数据异常, {}", JSONObject.toJSONString(infoVo));
                    }
                }
                //统一放入map中,往excel文件写入
                resultMap.add(item);
            }
        }
    }
    
  2. 业务实现类

    //表头生成
    ExcelWriter writer = ExcelUtil.getWriter(excelPath);
    for (String field : exportParam.getFieldList()) {
         writer.addHeaderAlias(SourceAndFieldEnum.filedDb(field), field);
    }
    List<Map<String, Object>> resultMap = new ArrayList<>();
    //...
    writer.write(resultMap, true);
    
posted @ 2021-08-16 14:50  ayueC  阅读(639)  评论(1)    收藏  举报