#### 2.7 如何自定义数据处理 导入导出总有一些自定义格式转换,AutoPoi虽然定义了很多服务,但是也无法满足所有客户的需求,这个时候就需要咱们自己定义数据处理 AutoPoi提供了 ~~~ /** * Excel 导入导出 数据处理接口 * * @author JueYue * 2014年6月19日 下午11:59:45 */ public interface IExcelDataHandler<T> { /** * 导出处理方法 * * @param obj * 当前对象 * @param name * 当前字段名称 * @param value * 当前值 * @return */ public Object exportHandler(T obj, String name, Object value); /** * 获取需要处理的字段,导入和导出统一处理了, 减少书写的字段 * * @return */ public String[] getNeedHandlerFields(); /** * 导入处理方法 当前对象,当前字段名称,当前值 * * @param obj * 当前对象 * @param name * 当前字段名称 * @param value * 当前值 * @return */ public Object importHandler(T obj, String name, Object value); /** * 设置需要处理的属性列表 * @param fields */ public void setNeedHandlerFields(String[] fields); /** * 设置Map导入,自定义 put * @param map * @param originKey * @param value */ public void setMapValue(Map<String, Object> map, String originKey, Object value); /** * 获取这个字段的 Hyperlink ,07版本需要,03版本不需要 * @param creationHelper * @param obj * @param name * @param value * @return */ public Hyperlink getHyperlink(CreationHelper creationHelper, T obj, String name, Object value); } ~~~ 简单的使用方法如下 ~~~ CourseHandler hanlder = new CourseHandler(); hanlder.setNeedHandlerFields(new String[] { "课程名称" }); exportParams.setDataHandler(hanlder); ~~~ 我们自己实现以下这个类,也可以继承ExcelDataHandlerDefaultImpl ,避免实现多余的接口 setNeedHandlerFields 这个是需要我们自己处理的字段,需要手动设置 让我们看一个demo ~~~ public class MapImportHandler extends ExcelDataHandlerDefaultImpl<Map<String, Object>> { @Override public void setMapValue(Map<String, Object> map, String originKey, Object value) { if (value instanceof Double) { map.put(getRealKey(originKey), PoiPublicUtil.doubleToString((Double) value)); } else { map.put(getRealKey(originKey), value != null ? value.toString() : null); } } private String getRealKey(String originKey) { if (originKey.equals("交易账户")) { return "accountNo"; } if (originKey.equals("姓名")) { return "name"; } if (originKey.equals("客户类型")) { return "type"; } return originKey; } } ~~~ 这里我们在map导入的时候把map的key给转了,从中文转为习惯的英文