根据自选择字段导出数据成excel文件
根据自选择字段导出数据成excel文件
在项目开发中有一项需求是,用户根据自己的需要选择字段,把数据导成excel文件。这里用到了反射进行实现。
-
核心代码类
@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); } } }
-
业务实现类
//表头生成 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);
既要仰望星空,又要脚踏实地