@@ -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); | |||
} |