| @@ -112,6 +112,10 @@ public @interface Excel { | |||
| * 值得替换 导出是{a_id,b_id} 导入反过来,所以只用写一个 | |||
| */ | |||
| public String[] replace() default {}; | |||
| /** | |||
| * 字典名称 | |||
| */ | |||
| public String dict() default ""; | |||
| /** | |||
| * 导入路径,如果是图片可以填写,默认是upload/className/ IconEntity这个类对应的就是upload/Icon/ | |||
| @@ -162,4 +166,6 @@ public @interface Excel { | |||
| * @return | |||
| */ | |||
| public boolean isColumnHidden() default false; | |||
| } | |||
| @@ -16,6 +16,7 @@ | |||
| package cn.afterturn.easypoi.excel.entity; | |||
| import cn.afterturn.easypoi.handler.inter.IExcelDataHandler; | |||
| import cn.afterturn.easypoi.handler.inter.IExcelDictHandler; | |||
| /** | |||
| * 基础参数 | |||
| @@ -28,14 +29,26 @@ public class ExcelBaseParams { | |||
| /** | |||
| * 数据处理接口,以此为主,replace,format都在这后面 | |||
| */ | |||
| private IExcelDataHandler dataHanlder; | |||
| private IExcelDataHandler dataHandler; | |||
| public IExcelDataHandler getDataHanlder() { | |||
| return dataHanlder; | |||
| /** | |||
| * 字段处理类 | |||
| */ | |||
| private IExcelDictHandler dictHandler; | |||
| public IExcelDataHandler getDataHandler() { | |||
| return dataHandler; | |||
| } | |||
| public void setDataHanlder(IExcelDataHandler dataHanlder) { | |||
| this.dataHanlder = dataHanlder; | |||
| public void setDataHandler(IExcelDataHandler dataHandler) { | |||
| this.dataHandler = dataHandler; | |||
| } | |||
| public IExcelDictHandler getDictHandler() { | |||
| return dictHandler; | |||
| } | |||
| public void setDictHandler(IExcelDictHandler dictHandler) { | |||
| this.dictHandler = dictHandler; | |||
| } | |||
| } | |||
| @@ -50,6 +50,10 @@ public class ExcelBaseEntity { | |||
| * 导出日期格式 | |||
| */ | |||
| private String[] replace; | |||
| /** | |||
| * 字典名称 | |||
| */ | |||
| private String dict; | |||
| /** | |||
| * set/get方法 | |||
| */ | |||
| @@ -145,4 +149,16 @@ public class ExcelBaseEntity { | |||
| public void setFixedIndex(int fixedIndex) { | |||
| this.fixedIndex = fixedIndex; | |||
| } | |||
| public String getDict() { | |||
| return dict; | |||
| } | |||
| public void setDict(String dict) { | |||
| this.dict = dict; | |||
| } | |||
| public void setFixedIndex(Integer fixedIndex) { | |||
| this.fixedIndex = fixedIndex; | |||
| } | |||
| } | |||
| @@ -109,9 +109,9 @@ public class ExcelBatchExportService extends ExcelExportService { | |||
| List<ExcelExportEntity> entityList, Collection<?> dataSet, | |||
| Sheet sheet) { | |||
| try { | |||
| dataHanlder = entity.getDataHanlder(); | |||
| if (dataHanlder != null && dataHanlder.getNeedHandlerFields() != null) { | |||
| needHanlderList = Arrays.asList(dataHanlder.getNeedHandlerFields()); | |||
| dataHandler = entity.getDataHandler(); | |||
| if (dataHandler != null && dataHandler.getNeedHandlerFields() != null) { | |||
| needHandlerList = Arrays.asList(dataHandler.getNeedHandlerFields()); | |||
| } | |||
| // 创建表格样式 | |||
| setExcelExportStyler((IExcelExportStyler) entity.getStyle() | |||
| @@ -149,10 +149,11 @@ public class ExcelExportService extends BaseExportService { | |||
| List<ExcelExportEntity> entityList, Collection<?> dataSet, | |||
| Sheet sheet) { | |||
| try { | |||
| dataHanlder = entity.getDataHanlder(); | |||
| if (dataHanlder != null && dataHanlder.getNeedHandlerFields() != null) { | |||
| needHanlderList = Arrays.asList(dataHanlder.getNeedHandlerFields()); | |||
| dataHandler = entity.getDataHandler(); | |||
| if (dataHandler != null && dataHandler.getNeedHandlerFields() != null) { | |||
| needHandlerList = Arrays.asList(dataHandler.getNeedHandlerFields()); | |||
| } | |||
| dictHandler = entity.getDictHandler(); | |||
| // 创建表格样式 | |||
| setExcelExportStyler((IExcelExportStyler) entity.getStyle() | |||
| .getConstructor(Workbook.class).newInstance(workbook)); | |||
| @@ -104,7 +104,7 @@ public abstract class BaseExportService extends ExportCommonService { | |||
| entity); | |||
| if (entity.isHyperlink()) { | |||
| row.getCell(cellNum - 1) | |||
| .setHyperlink(dataHanlder.getHyperlink( | |||
| .setHyperlink(dataHandler.getHyperlink( | |||
| row.getSheet().getWorkbook().getCreationHelper(), t, | |||
| entity.getName(), value)); | |||
| } | |||
| @@ -113,7 +113,7 @@ public abstract class BaseExportService extends ExportCommonService { | |||
| index % 2 == 0 ? getStyles(false, entity) : getStyles(true, entity), | |||
| entity); | |||
| if (entity.isHyperlink()) { | |||
| row.getCell(cellNum - 1).setHyperlink(dataHanlder.getHyperlink( | |||
| row.getCell(cellNum - 1).setHyperlink(dataHandler.getHyperlink( | |||
| row.getSheet().getWorkbook().getCreationHelper(), t, | |||
| entity.getName(), value)); | |||
| } | |||
| @@ -225,7 +225,7 @@ public abstract class BaseExportService extends ExportCommonService { | |||
| entity); | |||
| if (entity.isHyperlink()) { | |||
| row.getCell(cellNum - 1) | |||
| .setHyperlink(dataHanlder.getHyperlink( | |||
| .setHyperlink(dataHandler.getHyperlink( | |||
| row.getSheet().getWorkbook().getCreationHelper(), obj, entity.getName(), | |||
| value)); | |||
| } | |||
| @@ -234,7 +234,7 @@ public abstract class BaseExportService extends ExportCommonService { | |||
| index % 2 == 0 ? getStyles(false, entity) : getStyles(true, entity), entity); | |||
| if (entity.isHyperlink()) { | |||
| row.getCell(cellNum - 1) | |||
| .setHyperlink(dataHanlder.getHyperlink( | |||
| .setHyperlink(dataHandler.getHyperlink( | |||
| row.getSheet().getWorkbook().getCreationHelper(), obj, entity.getName(), | |||
| value)); | |||
| } | |||
| @@ -30,6 +30,7 @@ import java.util.Iterator; | |||
| import java.util.List; | |||
| import java.util.Map; | |||
| import cn.afterturn.easypoi.handler.inter.IExcelDictHandler; | |||
| import org.apache.commons.lang3.StringUtils; | |||
| import org.apache.commons.lang3.builder.ReflectionToStringBuilder; | |||
| import org.apache.commons.lang3.math.NumberUtils; | |||
| @@ -58,9 +59,10 @@ public class ExportCommonService { | |||
| protected static final Logger LOGGER = LoggerFactory.getLogger(ExportCommonService.class); | |||
| protected IExcelDataHandler dataHanlder; | |||
| protected IExcelDataHandler dataHandler; | |||
| protected IExcelDictHandler dictHandler; | |||
| protected List<String> needHanlderList; | |||
| protected List<String> needHandlerList; | |||
| /** | |||
| * 创建导出实体对象 | |||
| @@ -195,8 +197,11 @@ public class ExportCommonService { | |||
| if (StringUtils.isNotEmpty(entity.getNumFormat())) { | |||
| value = numFormatValue(value, entity); | |||
| } | |||
| if (needHanlderList != null && needHanlderList.contains(entity.getName())) { | |||
| value = dataHanlder.exportHandler(obj, entity.getName(), value); | |||
| if (StringUtils.isNotEmpty(entity.getDict()) && dictHandler != null) { | |||
| value = dictHandler.toName(entity.getDict(), obj, entity.getName(), value); | |||
| } | |||
| if (needHandlerList != null && needHandlerList.contains(entity.getName())) { | |||
| value = dataHandler.exportHandler(obj, entity.getName(), value); | |||
| } | |||
| if (StringUtils.isNotEmpty(entity.getSuffix()) && value != null) { | |||
| value = value + entity.getSuffix(); | |||
| @@ -243,6 +248,7 @@ public class ExportCommonService { | |||
| excelEntity.setMethod(PoiReflectorUtil.fromCache(pojoClass).getGetMethod(field.getName())); | |||
| excelEntity.setNumFormat(excel.numFormat()); | |||
| excelEntity.setColumnHidden(excel.isColumnHidden()); | |||
| excelEntity.setDict(excel.dict()); | |||
| if (excelGroup != null) { | |||
| excelEntity.setGroupName(PoiPublicUtil.getValueByTargetId(excelGroup.name(), targetId, null)); | |||
| } else { | |||
| @@ -198,9 +198,9 @@ public final class ExcelExportOfTemplateUtil extends BaseExportService { | |||
| } | |||
| if (dataSet != null) { | |||
| // step 4. 正常的数据填充 | |||
| dataHanlder = params.getDataHanlder(); | |||
| if (dataHanlder != null) { | |||
| needHanlderList = Arrays.asList(dataHanlder.getNeedHandlerFields()); | |||
| dataHandler = params.getDataHandler(); | |||
| if (dataHandler != null) { | |||
| needHandlerList = Arrays.asList(dataHandler.getNeedHandlerFields()); | |||
| } | |||
| addDataToSheet(pojoClass, dataSet, wb.getSheetAt(params.getDataSheetNum()), wb); | |||
| } | |||
| @@ -27,6 +27,7 @@ import java.util.Date; | |||
| import java.util.List; | |||
| import java.util.Map; | |||
| import cn.afterturn.easypoi.handler.inter.IExcelDictHandler; | |||
| import org.apache.commons.lang3.StringUtils; | |||
| import org.apache.poi.ss.usermodel.Cell; | |||
| import org.apache.poi.ss.usermodel.CellType; | |||
| @@ -52,7 +53,7 @@ public class CellValueService { | |||
| private static final Logger LOGGER = LoggerFactory.getLogger(CellValueService.class); | |||
| private List<String> hanlderList = null; | |||
| private List<String> handlerList = null; | |||
| /** | |||
| * 获取单元格内的值 | |||
| @@ -179,15 +180,15 @@ public class CellValueService { | |||
| /** | |||
| * 获取cell的值 | |||
| * | |||
| * @param object | |||
| * @param excelParams | |||
| * @param object | |||
| * @param cell | |||
| * @param excelParams | |||
| * @param titleString | |||
| * @param dictHandler | |||
| */ | |||
| public Object getValue(IExcelDataHandler<?> dataHanlder, Object object, Cell cell, | |||
| public Object getValue(IExcelDataHandler<?> dataHandler, Object object, Cell cell, | |||
| Map<String, ExcelImportEntity> excelParams, | |||
| String titleString) throws Exception { | |||
| String titleString, IExcelDictHandler dictHandler) throws Exception { | |||
| ExcelImportEntity entity = excelParams.get(titleString); | |||
| String xclass = "class java.lang.Object"; | |||
| if (!(object instanceof Map)) { | |||
| @@ -200,8 +201,12 @@ public class CellValueService { | |||
| if (entity != null) { | |||
| result = hanlderSuffix(entity.getSuffix(), result); | |||
| result = replaceValue(entity.getReplace(), result); | |||
| result = replaceValue(entity.getReplace(), result); | |||
| if(dictHandler != null && StringUtils.isNoneBlank(entity.getDict())){ | |||
| dictHandler.toValue(entity.getDict(), object, entity.getName(), result); | |||
| } | |||
| } | |||
| result = hanlderValue(dataHanlder, object, result, titleString); | |||
| result = handlerValue(dataHandler, object, result, titleString); | |||
| return getValueByType(xclass, result, entity); | |||
| } | |||
| @@ -225,7 +230,7 @@ public class CellValueService { | |||
| Object result = cellEntity.getValue(); | |||
| result = hanlderSuffix(entity.getSuffix(), result); | |||
| result = replaceValue(entity.getReplace(), result); | |||
| result = hanlderValue(dataHanlder, object, result, titleString); | |||
| result = handlerValue(dataHanlder, object, result, titleString); | |||
| return getValueByType(xclass, result, entity); | |||
| } | |||
| @@ -310,24 +315,24 @@ public class CellValueService { | |||
| /** | |||
| * 调用处理接口处理值 | |||
| * | |||
| * @param dataHanlder | |||
| * @param dataHandler | |||
| * @param object | |||
| * @param result | |||
| * @param titleString | |||
| * @return | |||
| */ | |||
| @SuppressWarnings({"unchecked", "rawtypes"}) | |||
| private Object hanlderValue(IExcelDataHandler dataHanlder, Object object, Object result, | |||
| private Object handlerValue(IExcelDataHandler dataHandler, Object object, Object result, | |||
| String titleString) { | |||
| if (dataHanlder == null || dataHanlder.getNeedHandlerFields() == null | |||
| || dataHanlder.getNeedHandlerFields().length == 0) { | |||
| if (dataHandler == null || dataHandler.getNeedHandlerFields() == null | |||
| || dataHandler.getNeedHandlerFields().length == 0) { | |||
| return result; | |||
| } | |||
| if (hanlderList == null) { | |||
| hanlderList = Arrays.asList(dataHanlder.getNeedHandlerFields()); | |||
| if (handlerList == null) { | |||
| handlerList = Arrays.asList(dataHandler.getNeedHandlerFields()); | |||
| } | |||
| if (hanlderList.contains(titleString)) { | |||
| return dataHanlder.importHandler(object, titleString, result); | |||
| if (handlerList.contains(titleString)) { | |||
| return dataHandler.importHandler(object, titleString, result); | |||
| } | |||
| return result; | |||
| } | |||
| @@ -542,11 +542,11 @@ public class ExcelImportService extends ImportBaseService { | |||
| private void saveFieldValue(ImportParams params, Object object, Cell cell, | |||
| Map<String, ExcelImportEntity> excelParams, String titleString, | |||
| Row row) throws Exception { | |||
| Object value = cellValueServer.getValue(params.getDataHanlder(), object, cell, excelParams, | |||
| titleString); | |||
| Object value = cellValueServer.getValue(params.getDataHandler(), object, cell, excelParams, | |||
| titleString, params.getDictHandler()); | |||
| if (object instanceof Map) { | |||
| if (params.getDataHanlder() != null) { | |||
| params.getDataHanlder().setMapValue((Map) object, titleString, value); | |||
| if (params.getDataHandler() != null) { | |||
| params.getDataHandler().setMapValue((Map) object, titleString, value); | |||
| } else { | |||
| ((Map) object).put(titleString, value); | |||
| } | |||
| @@ -178,6 +178,7 @@ public class ImportBaseService { | |||
| } else { | |||
| excelEntity.setFormat(excel.format()); | |||
| } | |||
| excelEntity.setDict(excel.dict()); | |||
| } | |||
| public void getExcelFieldList(String targetId, Field[] fields, Class<?> pojoClass, | |||
| @@ -199,7 +199,7 @@ public class SaxRowRead extends ImportBaseService implements ISaxRowRead { | |||
| private void saveFieldValue(ImportParams params, Object object, SaxReadCellEntity entity, | |||
| Map<String, ExcelImportEntity> excelParams, | |||
| String titleString) throws Exception { | |||
| Object value = cellValueServer.getValue(params.getDataHanlder(), object, entity, | |||
| Object value = cellValueServer.getValue(params.getDataHandler(), object, entity, | |||
| excelParams, titleString); | |||
| setValues(excelParams.get(titleString), object, value); | |||
| } | |||
| @@ -0,0 +1,31 @@ | |||
| package cn.afterturn.easypoi.handler.inter; | |||
| /** | |||
| * @author jueyue on 18-2-2. | |||
| * @version 3.0.4 | |||
| */ | |||
| public interface IExcelDictHandler { | |||
| /** | |||
| * 从值翻译到名称 | |||
| * | |||
| * @param dict 字典Key | |||
| * @param obj 对象 | |||
| * @param name 属性名称 | |||
| * @param value 属性值 | |||
| * @return | |||
| */ | |||
| public String toName(String dict, Object obj, String name, Object value); | |||
| /** | |||
| * 从名称翻译到值 | |||
| * | |||
| * @param dict 字典Key | |||
| * @param obj 对象 | |||
| * @param name 属性名称 | |||
| * @param value 属性值 | |||
| * @return | |||
| */ | |||
| public String toValue(String dict, Object obj, String name, Object value); | |||
| } | |||