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