如何自定义数据处理
导入导出总有一些自定义格式转换,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给转了,从中文转为习惯的英文