|  |  | @@ -55,6 +55,7 @@ import org.jeecgframework.poi.excel.imports.base.ImportBaseService; | 
		
	
		
			
			|  |  |  | import org.jeecgframework.poi.exception.excel.ExcelImportException; | 
		
	
		
			
			|  |  |  | import org.jeecgframework.poi.exception.excel.enums.ExcelImportEnum; | 
		
	
		
			
			|  |  |  | import org.jeecgframework.poi.handler.inter.IExcelModel; | 
		
	
		
			
			|  |  |  | import org.jeecgframework.poi.util.PoiCellUtil; | 
		
	
		
			
			|  |  |  | import org.jeecgframework.poi.util.PoiPublicUtil; | 
		
	
		
			
			|  |  |  | import org.jeecgframework.poi.util.PoiReflectorUtil; | 
		
	
		
			
			|  |  |  | import org.jeecgframework.poi.util.PoiValidationUtil; | 
		
	
	
		
			
				|  |  | @@ -70,464 +71,452 @@ import org.slf4j.LoggerFactory; | 
		
	
		
			
			|  |  |  | @SuppressWarnings({ "rawtypes", "unchecked", "hiding" }) | 
		
	
		
			
			|  |  |  | public class ExcelImportServer extends ImportBaseService { | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | private final static Logger	LOGGER		= LoggerFactory.getLogger(ExcelImportServer.class); | 
		
	
		
			
			|  |  |  | private final static Logger LOGGER     = LoggerFactory.getLogger(ExcelImportServer.class); | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | private CellValueServer		cellValueServer; | 
		
	
		
			
			|  |  |  | private CellValueServer     cellValueServer; | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | private boolean				verfiyFail	= false; | 
		
	
		
			
			|  |  |  | /** | 
		
	
		
			
			|  |  |  | * 异常数据styler | 
		
	
		
			
			|  |  |  | */ | 
		
	
		
			
			|  |  |  | private CellStyle			errorCellStyle; | 
		
	
		
			
			|  |  |  | private boolean             verfiyFail = false; | 
		
	
		
			
			|  |  |  | /** | 
		
	
		
			
			|  |  |  | * 异常数据styler | 
		
	
		
			
			|  |  |  | */ | 
		
	
		
			
			|  |  |  | private CellStyle           errorCellStyle; | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | public ExcelImportServer() { | 
		
	
		
			
			|  |  |  | this.cellValueServer = new CellValueServer(); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | public ExcelImportServer() { | 
		
	
		
			
			|  |  |  | this.cellValueServer = new CellValueServer(); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | /*** | 
		
	
		
			
			|  |  |  | * 向List里面继续添加元素 | 
		
	
		
			
			|  |  |  | * | 
		
	
		
			
			|  |  |  | * @param object | 
		
	
		
			
			|  |  |  | * @param param | 
		
	
		
			
			|  |  |  | * @param row | 
		
	
		
			
			|  |  |  | * @param titlemap | 
		
	
		
			
			|  |  |  | * @param targetId | 
		
	
		
			
			|  |  |  | * @param pictures | 
		
	
		
			
			|  |  |  | * @param params | 
		
	
		
			
			|  |  |  | */ | 
		
	
		
			
			|  |  |  | private void addListContinue(Object object, ExcelCollectionParams param, Row row, | 
		
	
		
			
			|  |  |  | Map<Integer, String> titlemap, String targetId, | 
		
	
		
			
			|  |  |  | Map<String, PictureData> pictures, | 
		
	
		
			
			|  |  |  | ImportParams params) throws Exception { | 
		
	
		
			
			|  |  |  | Collection collection = (Collection) PoiReflectorUtil.fromCache(object.getClass()) | 
		
	
		
			
			|  |  |  | .getValue(object, param.getName()); | 
		
	
		
			
			|  |  |  | Object entity = PoiPublicUtil.createObject(param.getType(), targetId); | 
		
	
		
			
			|  |  |  | String picId; | 
		
	
		
			
			|  |  |  | boolean isUsed = false;// 是否需要加上这个对象 | 
		
	
		
			
			|  |  |  | for (int i = row.getFirstCellNum(); i < param.getExcelParams().size(); i++) { | 
		
	
		
			
			|  |  |  | Cell cell = row.getCell(i); | 
		
	
		
			
			|  |  |  | String titleString = (String) titlemap.get(i); | 
		
	
		
			
			|  |  |  | if (param.getExcelParams().containsKey(titleString)) { | 
		
	
		
			
			|  |  |  | if (param.getExcelParams().get(titleString).getType() == 2) { | 
		
	
		
			
			|  |  |  | picId = row.getRowNum() + "_" + i; | 
		
	
		
			
			|  |  |  | saveImage(object, picId, param.getExcelParams(), titleString, pictures, params); | 
		
	
		
			
			|  |  |  | } else { | 
		
	
		
			
			|  |  |  | saveFieldValue(params, entity, cell, param.getExcelParams(), titleString, row); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | isUsed = true; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | if (isUsed) { | 
		
	
		
			
			|  |  |  | collection.add(entity); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | /*** | 
		
	
		
			
			|  |  |  | * 向List里面继续添加元素 | 
		
	
		
			
			|  |  |  | * | 
		
	
		
			
			|  |  |  | * @param object | 
		
	
		
			
			|  |  |  | * @param param | 
		
	
		
			
			|  |  |  | * @param row | 
		
	
		
			
			|  |  |  | * @param titlemap | 
		
	
		
			
			|  |  |  | * @param targetId | 
		
	
		
			
			|  |  |  | * @param pictures | 
		
	
		
			
			|  |  |  | * @param params | 
		
	
		
			
			|  |  |  | */ | 
		
	
		
			
			|  |  |  | private void addListContinue(Object object, ExcelCollectionParams param, Row row, | 
		
	
		
			
			|  |  |  | Map<Integer, String> titlemap, String targetId, | 
		
	
		
			
			|  |  |  | Map<String, PictureData> pictures, | 
		
	
		
			
			|  |  |  | ImportParams params) throws Exception { | 
		
	
		
			
			|  |  |  | Collection collection = (Collection) PoiReflectorUtil.fromCache(object.getClass()) | 
		
	
		
			
			|  |  |  | .getValue(object, param.getName()); | 
		
	
		
			
			|  |  |  | Object entity = PoiPublicUtil.createObject(param.getType(), targetId); | 
		
	
		
			
			|  |  |  | String picId; | 
		
	
		
			
			|  |  |  | boolean isUsed = false;// 是否需要加上这个对象 | 
		
	
		
			
			|  |  |  | for (int i = row.getFirstCellNum(); i < param.getExcelParams().size(); i++) { | 
		
	
		
			
			|  |  |  | Cell cell = row.getCell(i); | 
		
	
		
			
			|  |  |  | String titleString = (String) titlemap.get(i); | 
		
	
		
			
			|  |  |  | if (param.getExcelParams().containsKey(titleString)) { | 
		
	
		
			
			|  |  |  | if (param.getExcelParams().get(titleString).getType() == 2) { | 
		
	
		
			
			|  |  |  | picId = row.getRowNum() + "_" + i; | 
		
	
		
			
			|  |  |  | saveImage(object, picId, param.getExcelParams(), titleString, pictures, params); | 
		
	
		
			
			|  |  |  | } else { | 
		
	
		
			
			|  |  |  | saveFieldValue(params, entity, cell, param.getExcelParams(), titleString, row); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | isUsed = true; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | if (isUsed) { | 
		
	
		
			
			|  |  |  | collection.add(entity); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | /** | 
		
	
		
			
			|  |  |  | * 获取key的值,针对不同类型获取不同的值 | 
		
	
		
			
			|  |  |  | * | 
		
	
		
			
			|  |  |  | * @author JueYue | 
		
	
		
			
			|  |  |  | *  2013-11-21 | 
		
	
		
			
			|  |  |  | * @param cell | 
		
	
		
			
			|  |  |  | * @return | 
		
	
		
			
			|  |  |  | */ | 
		
	
		
			
			|  |  |  | private String getKeyValue(Cell cell) { | 
		
	
		
			
			|  |  |  | Object obj = null; | 
		
	
		
			
			|  |  |  | switch (cell.getCellType()) { | 
		
	
		
			
			|  |  |  | case Cell.CELL_TYPE_STRING: | 
		
	
		
			
			|  |  |  | obj = cell.getStringCellValue(); | 
		
	
		
			
			|  |  |  | break; | 
		
	
		
			
			|  |  |  | case Cell.CELL_TYPE_BOOLEAN: | 
		
	
		
			
			|  |  |  | obj = cell.getBooleanCellValue(); | 
		
	
		
			
			|  |  |  | break; | 
		
	
		
			
			|  |  |  | case Cell.CELL_TYPE_NUMERIC: | 
		
	
		
			
			|  |  |  | obj = cell.getNumericCellValue(); | 
		
	
		
			
			|  |  |  | break; | 
		
	
		
			
			|  |  |  | case Cell.CELL_TYPE_FORMULA: | 
		
	
		
			
			|  |  |  | obj = cell.getCellFormula(); | 
		
	
		
			
			|  |  |  | break; | 
		
	
		
			
			|  |  |  | default: | 
		
	
		
			
			|  |  |  | cell.setCellType(Cell.CELL_TYPE_STRING); | 
		
	
		
			
			|  |  |  | obj = cell.getStringCellValue(); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | return obj == null ? null : obj.toString().trim(); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | /** | 
		
	
		
			
			|  |  |  | * 获取key的值,针对不同类型获取不同的值 | 
		
	
		
			
			|  |  |  | * | 
		
	
		
			
			|  |  |  | * @author JueYue | 
		
	
		
			
			|  |  |  | *  2013-11-21 | 
		
	
		
			
			|  |  |  | * @param cell | 
		
	
		
			
			|  |  |  | * @return | 
		
	
		
			
			|  |  |  | */ | 
		
	
		
			
			|  |  |  | private String getKeyValue(Cell cell) { | 
		
	
		
			
			|  |  |  | Object obj = PoiCellUtil.getCellValue(cell); | 
		
	
		
			
			|  |  |  | return obj == null ? null : obj.toString().trim(); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | /** | 
		
	
		
			
			|  |  |  | * 获取保存的真实路径 | 
		
	
		
			
			|  |  |  | * | 
		
	
		
			
			|  |  |  | * @param excelImportEntity | 
		
	
		
			
			|  |  |  | * @param object | 
		
	
		
			
			|  |  |  | * @return | 
		
	
		
			
			|  |  |  | * @throws Exception | 
		
	
		
			
			|  |  |  | */ | 
		
	
		
			
			|  |  |  | private String getSaveUrl(ExcelImportEntity excelImportEntity, Object object) throws Exception { | 
		
	
		
			
			|  |  |  | String url = ""; | 
		
	
		
			
			|  |  |  | if (excelImportEntity.getSaveUrl().equals("upload")) { | 
		
	
		
			
			|  |  |  | if (excelImportEntity.getMethods() != null | 
		
	
		
			
			|  |  |  | && excelImportEntity.getMethods().size() > 0) { | 
		
	
		
			
			|  |  |  | object = getFieldBySomeMethod(excelImportEntity.getMethods(), object); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | url = object.getClass().getName() | 
		
	
		
			
			|  |  |  | .split("\\.")[object.getClass().getName().split("\\.").length - 1]; | 
		
	
		
			
			|  |  |  | return excelImportEntity.getSaveUrl() + "/" + url; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | return excelImportEntity.getSaveUrl(); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | /** | 
		
	
		
			
			|  |  |  | * 获取保存的真实路径 | 
		
	
		
			
			|  |  |  | * | 
		
	
		
			
			|  |  |  | * @param excelImportEntity | 
		
	
		
			
			|  |  |  | * @param object | 
		
	
		
			
			|  |  |  | * @return | 
		
	
		
			
			|  |  |  | * @throws Exception | 
		
	
		
			
			|  |  |  | */ | 
		
	
		
			
			|  |  |  | private String getSaveUrl(ExcelImportEntity excelImportEntity, Object object) throws Exception { | 
		
	
		
			
			|  |  |  | String url = ""; | 
		
	
		
			
			|  |  |  | if (excelImportEntity.getSaveUrl().equals("upload")) { | 
		
	
		
			
			|  |  |  | if (excelImportEntity.getMethods() != null | 
		
	
		
			
			|  |  |  | && excelImportEntity.getMethods().size() > 0) { | 
		
	
		
			
			|  |  |  | object = getFieldBySomeMethod(excelImportEntity.getMethods(), object); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | url = object.getClass().getName() | 
		
	
		
			
			|  |  |  | .split("\\.")[object.getClass().getName().split("\\.").length - 1]; | 
		
	
		
			
			|  |  |  | return excelImportEntity.getSaveUrl() + "/" + url; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | return excelImportEntity.getSaveUrl(); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | private <T> List<T> importExcel(Collection<T> result, Sheet sheet, Class<?> pojoClass, | 
		
	
		
			
			|  |  |  | ImportParams params, | 
		
	
		
			
			|  |  |  | Map<String, PictureData> pictures) throws Exception { | 
		
	
		
			
			|  |  |  | List collection = new ArrayList(); | 
		
	
		
			
			|  |  |  | Map<String, ExcelImportEntity> excelParams = new HashMap<String, ExcelImportEntity>(); | 
		
	
		
			
			|  |  |  | List<ExcelCollectionParams> excelCollection = new ArrayList<ExcelCollectionParams>(); | 
		
	
		
			
			|  |  |  | String targetId = null; | 
		
	
		
			
			|  |  |  | if (!Map.class.equals(pojoClass)) { | 
		
	
		
			
			|  |  |  | Field fileds[] = PoiPublicUtil.getClassFields(pojoClass); | 
		
	
		
			
			|  |  |  | ExcelTarget etarget = pojoClass.getAnnotation(ExcelTarget.class); | 
		
	
		
			
			|  |  |  | if (etarget != null) { | 
		
	
		
			
			|  |  |  | targetId = etarget.value(); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | getAllExcelField(targetId, fileds, excelParams, excelCollection, pojoClass, null); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | Iterator<Row> rows = sheet.rowIterator(); | 
		
	
		
			
			|  |  |  | for (int j = 0; j < params.getTitleRows(); j++) { | 
		
	
		
			
			|  |  |  | rows.next(); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | Map<Integer, String> titlemap = getTitleMap(rows, params, excelCollection); | 
		
	
		
			
			|  |  |  | checkIsValidTemplate(titlemap, excelParams, params, excelCollection); | 
		
	
		
			
			|  |  |  | Row row = null; | 
		
	
		
			
			|  |  |  | Object object = null; | 
		
	
		
			
			|  |  |  | String picId; | 
		
	
		
			
			|  |  |  | while (rows.hasNext() | 
		
	
		
			
			|  |  |  | && (row == null | 
		
	
		
			
			|  |  |  | || sheet.getLastRowNum() - row.getRowNum() > params.getLastOfInvalidRow())) { | 
		
	
		
			
			|  |  |  | row = rows.next(); | 
		
	
		
			
			|  |  |  | // 判断是集合元素还是不是集合元素,如果是就继续加入这个集合,不是就创建新的对象 | 
		
	
		
			
			|  |  |  | // keyIndex 如果为空就不处理,仍然处理这一行 | 
		
	
		
			
			|  |  |  | if (params.getKeyIndex() != null | 
		
	
		
			
			|  |  |  | && (row.getCell(params.getKeyIndex()) == null | 
		
	
		
			
			|  |  |  | || StringUtils.isEmpty(getKeyValue(row.getCell(params.getKeyIndex())))) | 
		
	
		
			
			|  |  |  | && object != null) { | 
		
	
		
			
			|  |  |  | for (ExcelCollectionParams param : excelCollection) { | 
		
	
		
			
			|  |  |  | addListContinue(object, param, row, titlemap, targetId, pictures, params); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | } else { | 
		
	
		
			
			|  |  |  | object = PoiPublicUtil.createObject(pojoClass, targetId); | 
		
	
		
			
			|  |  |  | try { | 
		
	
		
			
			|  |  |  | for (int i = row.getFirstCellNum(), le = titlemap.size(); i < le; i++) { | 
		
	
		
			
			|  |  |  | Cell cell = row.getCell(i); | 
		
	
		
			
			|  |  |  | String titleString = (String) titlemap.get(i); | 
		
	
		
			
			|  |  |  | if (excelParams.containsKey(titleString) || Map.class.equals(pojoClass)) { | 
		
	
		
			
			|  |  |  | if (excelParams.get(titleString) != null | 
		
	
		
			
			|  |  |  | && excelParams.get(titleString).getType() == 2) { | 
		
	
		
			
			|  |  |  | picId = row.getRowNum() + "_" + i; | 
		
	
		
			
			|  |  |  | saveImage(object, picId, excelParams, titleString, pictures, | 
		
	
		
			
			|  |  |  | params); | 
		
	
		
			
			|  |  |  | } else { | 
		
	
		
			
			|  |  |  | saveFieldValue(params, object, cell, excelParams, titleString, row); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | private <T> List<T> importExcel(Collection<T> result, Sheet sheet, Class<?> pojoClass, | 
		
	
		
			
			|  |  |  | ImportParams params, | 
		
	
		
			
			|  |  |  | Map<String, PictureData> pictures) throws Exception { | 
		
	
		
			
			|  |  |  | List collection = new ArrayList(); | 
		
	
		
			
			|  |  |  | Map<String, ExcelImportEntity> excelParams = new HashMap<String, ExcelImportEntity>(); | 
		
	
		
			
			|  |  |  | List<ExcelCollectionParams> excelCollection = new ArrayList<ExcelCollectionParams>(); | 
		
	
		
			
			|  |  |  | String targetId = null; | 
		
	
		
			
			|  |  |  | if (!Map.class.equals(pojoClass)) { | 
		
	
		
			
			|  |  |  | Field fileds[] = PoiPublicUtil.getClassFields(pojoClass); | 
		
	
		
			
			|  |  |  | ExcelTarget etarget = pojoClass.getAnnotation(ExcelTarget.class); | 
		
	
		
			
			|  |  |  | if (etarget != null) { | 
		
	
		
			
			|  |  |  | targetId = etarget.value(); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | getAllExcelField(targetId, fileds, excelParams, excelCollection, pojoClass, null); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | Iterator<Row> rows = sheet.rowIterator(); | 
		
	
		
			
			|  |  |  | for (int j = 0; j < params.getTitleRows(); j++) { | 
		
	
		
			
			|  |  |  | rows.next(); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | Map<Integer, String> titlemap = getTitleMap(rows, params, excelCollection); | 
		
	
		
			
			|  |  |  | checkIsValidTemplate(titlemap, excelParams, params, excelCollection); | 
		
	
		
			
			|  |  |  | Row row = null; | 
		
	
		
			
			|  |  |  | Object object = null; | 
		
	
		
			
			|  |  |  | String picId; | 
		
	
		
			
			|  |  |  | int readRow = 0; | 
		
	
		
			
			|  |  |  | while (rows.hasNext() | 
		
	
		
			
			|  |  |  | && (row == null | 
		
	
		
			
			|  |  |  | || sheet.getLastRowNum() - row.getRowNum() > params.getLastOfInvalidRow())) { | 
		
	
		
			
			|  |  |  | if (params.getReadRows() > 0 && readRow > params.getReadRows()) { | 
		
	
		
			
			|  |  |  | break; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | row = rows.next(); | 
		
	
		
			
			|  |  |  | // 判断是集合元素还是不是集合元素,如果是就继续加入这个集合,不是就创建新的对象 | 
		
	
		
			
			|  |  |  | // keyIndex 如果为空就不处理,仍然处理这一行 | 
		
	
		
			
			|  |  |  | if (params.getKeyIndex() != null | 
		
	
		
			
			|  |  |  | && (row.getCell(params.getKeyIndex()) == null | 
		
	
		
			
			|  |  |  | || StringUtils.isEmpty(getKeyValue(row.getCell(params.getKeyIndex())))) | 
		
	
		
			
			|  |  |  | && object != null) { | 
		
	
		
			
			|  |  |  | for (ExcelCollectionParams param : excelCollection) { | 
		
	
		
			
			|  |  |  | addListContinue(object, param, row, titlemap, targetId, pictures, params); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | } else { | 
		
	
		
			
			|  |  |  | object = PoiPublicUtil.createObject(pojoClass, targetId); | 
		
	
		
			
			|  |  |  | try { | 
		
	
		
			
			|  |  |  | for (int i = row.getFirstCellNum(), le = titlemap.size(); i < le; i++) { | 
		
	
		
			
			|  |  |  | Cell cell = row.getCell(i); | 
		
	
		
			
			|  |  |  | String titleString = (String) titlemap.get(i); | 
		
	
		
			
			|  |  |  | if (excelParams.containsKey(titleString) || Map.class.equals(pojoClass)) { | 
		
	
		
			
			|  |  |  | if (excelParams.get(titleString) != null | 
		
	
		
			
			|  |  |  | && excelParams.get(titleString).getType() == 2) { | 
		
	
		
			
			|  |  |  | picId = row.getRowNum() + "_" + i; | 
		
	
		
			
			|  |  |  | saveImage(object, picId, excelParams, titleString, pictures, | 
		
	
		
			
			|  |  |  | params); | 
		
	
		
			
			|  |  |  | } else { | 
		
	
		
			
			|  |  |  | saveFieldValue(params, object, cell, excelParams, titleString, row); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | for (ExcelCollectionParams param : excelCollection) { | 
		
	
		
			
			|  |  |  | addListContinue(object, param, row, titlemap, targetId, pictures, params); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | if (verifyingDataValidity(object, row, params, pojoClass)) { | 
		
	
		
			
			|  |  |  | collection.add(object); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | } catch (ExcelImportException e) { | 
		
	
		
			
			|  |  |  | if (!e.getType().equals(ExcelImportEnum.VERIFY_ERROR)) { | 
		
	
		
			
			|  |  |  | throw new ExcelImportException(e.getType(), e); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | return collection; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | for (ExcelCollectionParams param : excelCollection) { | 
		
	
		
			
			|  |  |  | addListContinue(object, param, row, titlemap, targetId, pictures, params); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | if (verifyingDataValidity(object, row, params, pojoClass)) { | 
		
	
		
			
			|  |  |  | collection.add(object); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | } catch (ExcelImportException e) { | 
		
	
		
			
			|  |  |  | if (!e.getType().equals(ExcelImportEnum.VERIFY_ERROR)) { | 
		
	
		
			
			|  |  |  | throw new ExcelImportException(e.getType(), e); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | readRow++; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | return collection; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | /** | 
		
	
		
			
			|  |  |  | * 校验数据合法性 | 
		
	
		
			
			|  |  |  | * @param object | 
		
	
		
			
			|  |  |  | * @param row | 
		
	
		
			
			|  |  |  | * @param params | 
		
	
		
			
			|  |  |  | * @param pojoClass | 
		
	
		
			
			|  |  |  | * @return | 
		
	
		
			
			|  |  |  | */ | 
		
	
		
			
			|  |  |  | private boolean verifyingDataValidity(Object object, Row row, ImportParams params, | 
		
	
		
			
			|  |  |  | Class<?> pojoClass) { | 
		
	
		
			
			|  |  |  | boolean isAdd = true; | 
		
	
		
			
			|  |  |  | Cell cell = null; | 
		
	
		
			
			|  |  |  | if (params.isNeedVerfiy()) { | 
		
	
		
			
			|  |  |  | String errorMsg = PoiValidationUtil.validation(object); | 
		
	
		
			
			|  |  |  | if (StringUtils.isNotEmpty(errorMsg)) { | 
		
	
		
			
			|  |  |  | cell = row.createCell(row.getLastCellNum()); | 
		
	
		
			
			|  |  |  | cell.setCellValue(errorMsg); | 
		
	
		
			
			|  |  |  | if (object instanceof IExcelModel) { | 
		
	
		
			
			|  |  |  | IExcelModel model = (IExcelModel) object; | 
		
	
		
			
			|  |  |  | model.setErrorMsg(errorMsg); | 
		
	
		
			
			|  |  |  | } else { | 
		
	
		
			
			|  |  |  | isAdd = false; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | verfiyFail = true; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | if (params.getVerifyHanlder() != null) { | 
		
	
		
			
			|  |  |  | ExcelVerifyHanlderResult result = params.getVerifyHanlder().verifyHandler(object); | 
		
	
		
			
			|  |  |  | if (!result.isSuccess()) { | 
		
	
		
			
			|  |  |  | if (cell == null) | 
		
	
		
			
			|  |  |  | cell = row.createCell(row.getLastCellNum()); | 
		
	
		
			
			|  |  |  | cell.setCellValue((StringUtils.isNoneBlank(cell.getStringCellValue()) | 
		
	
		
			
			|  |  |  | ? cell.getStringCellValue() + "," : "") + result.getMsg()); | 
		
	
		
			
			|  |  |  | if (object instanceof IExcelModel) { | 
		
	
		
			
			|  |  |  | IExcelModel model = (IExcelModel) object; | 
		
	
		
			
			|  |  |  | model.setErrorMsg((StringUtils.isNoneBlank(model.getErrorMsg()) | 
		
	
		
			
			|  |  |  | ? model.getErrorMsg() + "," : "") + result.getMsg()); | 
		
	
		
			
			|  |  |  | } else { | 
		
	
		
			
			|  |  |  | isAdd = false; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | verfiyFail = true; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | if (cell != null) | 
		
	
		
			
			|  |  |  | cell.setCellStyle(errorCellStyle); | 
		
	
		
			
			|  |  |  | return isAdd; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | /** | 
		
	
		
			
			|  |  |  | * 校验数据合法性 | 
		
	
		
			
			|  |  |  | * @param object | 
		
	
		
			
			|  |  |  | * @param row | 
		
	
		
			
			|  |  |  | * @param params | 
		
	
		
			
			|  |  |  | * @param pojoClass | 
		
	
		
			
			|  |  |  | * @return | 
		
	
		
			
			|  |  |  | */ | 
		
	
		
			
			|  |  |  | private boolean verifyingDataValidity(Object object, Row row, ImportParams params, | 
		
	
		
			
			|  |  |  | Class<?> pojoClass) { | 
		
	
		
			
			|  |  |  | boolean isAdd = true; | 
		
	
		
			
			|  |  |  | Cell cell = null; | 
		
	
		
			
			|  |  |  | if (params.isNeedVerfiy()) { | 
		
	
		
			
			|  |  |  | String errorMsg = PoiValidationUtil.validation(object); | 
		
	
		
			
			|  |  |  | if (StringUtils.isNotEmpty(errorMsg)) { | 
		
	
		
			
			|  |  |  | cell = row.createCell(row.getLastCellNum()); | 
		
	
		
			
			|  |  |  | cell.setCellValue(errorMsg); | 
		
	
		
			
			|  |  |  | if (object instanceof IExcelModel) { | 
		
	
		
			
			|  |  |  | IExcelModel model = (IExcelModel) object; | 
		
	
		
			
			|  |  |  | model.setErrorMsg(errorMsg); | 
		
	
		
			
			|  |  |  | } else { | 
		
	
		
			
			|  |  |  | isAdd = false; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | verfiyFail = true; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | if (params.getVerifyHanlder() != null) { | 
		
	
		
			
			|  |  |  | ExcelVerifyHanlderResult result = params.getVerifyHanlder().verifyHandler(object); | 
		
	
		
			
			|  |  |  | if (!result.isSuccess()) { | 
		
	
		
			
			|  |  |  | if (cell == null) | 
		
	
		
			
			|  |  |  | cell = row.createCell(row.getLastCellNum()); | 
		
	
		
			
			|  |  |  | cell.setCellValue((StringUtils.isNoneBlank(cell.getStringCellValue()) | 
		
	
		
			
			|  |  |  | ? cell.getStringCellValue() + "," : "") + result.getMsg()); | 
		
	
		
			
			|  |  |  | if (object instanceof IExcelModel) { | 
		
	
		
			
			|  |  |  | IExcelModel model = (IExcelModel) object; | 
		
	
		
			
			|  |  |  | model.setErrorMsg((StringUtils.isNoneBlank(model.getErrorMsg()) | 
		
	
		
			
			|  |  |  | ? model.getErrorMsg() + "," : "") + result.getMsg()); | 
		
	
		
			
			|  |  |  | } else { | 
		
	
		
			
			|  |  |  | isAdd = false; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | verfiyFail = true; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | if (cell != null) | 
		
	
		
			
			|  |  |  | cell.setCellStyle(errorCellStyle); | 
		
	
		
			
			|  |  |  | return isAdd; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | /** | 
		
	
		
			
			|  |  |  | * 获取表格字段列名对应信息 | 
		
	
		
			
			|  |  |  | * @param rows | 
		
	
		
			
			|  |  |  | * @param params | 
		
	
		
			
			|  |  |  | * @param excelCollection | 
		
	
		
			
			|  |  |  | * @return | 
		
	
		
			
			|  |  |  | */ | 
		
	
		
			
			|  |  |  | private Map<Integer, String> getTitleMap(Iterator<Row> rows, ImportParams params, | 
		
	
		
			
			|  |  |  | List<ExcelCollectionParams> excelCollection) { | 
		
	
		
			
			|  |  |  | Map<Integer, String> titlemap = new HashMap<Integer, String>(); | 
		
	
		
			
			|  |  |  | Iterator<Cell> cellTitle; | 
		
	
		
			
			|  |  |  | String collectionName = null; | 
		
	
		
			
			|  |  |  | ExcelCollectionParams collectionParams = null; | 
		
	
		
			
			|  |  |  | Row row = null; | 
		
	
		
			
			|  |  |  | for (int j = 0; j < params.getHeadRows(); j++) { | 
		
	
		
			
			|  |  |  | row = rows.next(); | 
		
	
		
			
			|  |  |  | if (row == null) { | 
		
	
		
			
			|  |  |  | continue; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | cellTitle = row.cellIterator(); | 
		
	
		
			
			|  |  |  | while (cellTitle.hasNext()) { | 
		
	
		
			
			|  |  |  | Cell cell = cellTitle.next(); | 
		
	
		
			
			|  |  |  | String value = getKeyValue(cell); | 
		
	
		
			
			|  |  |  | value =  value.replace("\n", ""); | 
		
	
		
			
			|  |  |  | int i = cell.getColumnIndex(); | 
		
	
		
			
			|  |  |  | //用以支持重名导入 | 
		
	
		
			
			|  |  |  | if (StringUtils.isNotEmpty(value)) { | 
		
	
		
			
			|  |  |  | if (titlemap.containsKey(i)) { | 
		
	
		
			
			|  |  |  | collectionName = titlemap.get(i); | 
		
	
		
			
			|  |  |  | collectionParams = getCollectionParams(excelCollection, collectionName); | 
		
	
		
			
			|  |  |  | titlemap.put(i, collectionName + "_" + value); | 
		
	
		
			
			|  |  |  | } else if (StringUtils.isNotEmpty(collectionName) && collectionParams != null | 
		
	
		
			
			|  |  |  | && collectionParams.getExcelParams() | 
		
	
		
			
			|  |  |  | .containsKey(collectionName + "_" + value)) { | 
		
	
		
			
			|  |  |  | titlemap.put(i, collectionName + "_" + value); | 
		
	
		
			
			|  |  |  | } else { | 
		
	
		
			
			|  |  |  | collectionName = null; | 
		
	
		
			
			|  |  |  | collectionParams = null; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | if (StringUtils.isEmpty(collectionName)) { | 
		
	
		
			
			|  |  |  | titlemap.put(i, value); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | return titlemap; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | /** | 
		
	
		
			
			|  |  |  | * 获取表格字段列名对应信息 | 
		
	
		
			
			|  |  |  | * @param rows | 
		
	
		
			
			|  |  |  | * @param params | 
		
	
		
			
			|  |  |  | * @param excelCollection | 
		
	
		
			
			|  |  |  | * @return | 
		
	
		
			
			|  |  |  | */ | 
		
	
		
			
			|  |  |  | private Map<Integer, String> getTitleMap(Iterator<Row> rows, ImportParams params, | 
		
	
		
			
			|  |  |  | List<ExcelCollectionParams> excelCollection) { | 
		
	
		
			
			|  |  |  | Map<Integer, String> titlemap = new HashMap<Integer, String>(); | 
		
	
		
			
			|  |  |  | Iterator<Cell> cellTitle; | 
		
	
		
			
			|  |  |  | String collectionName = null; | 
		
	
		
			
			|  |  |  | ExcelCollectionParams collectionParams = null; | 
		
	
		
			
			|  |  |  | Row row = null; | 
		
	
		
			
			|  |  |  | for (int j = 0; j < params.getHeadRows(); j++) { | 
		
	
		
			
			|  |  |  | row = rows.next(); | 
		
	
		
			
			|  |  |  | if (row == null) { | 
		
	
		
			
			|  |  |  | continue; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | cellTitle = row.cellIterator(); | 
		
	
		
			
			|  |  |  | while (cellTitle.hasNext()) { | 
		
	
		
			
			|  |  |  | Cell cell = cellTitle.next(); | 
		
	
		
			
			|  |  |  | String value = getKeyValue(cell); | 
		
	
		
			
			|  |  |  | value = value.replace("\n", ""); | 
		
	
		
			
			|  |  |  | int i = cell.getColumnIndex(); | 
		
	
		
			
			|  |  |  | //用以支持重名导入 | 
		
	
		
			
			|  |  |  | if (StringUtils.isNotEmpty(value)) { | 
		
	
		
			
			|  |  |  | if (titlemap.containsKey(i)) { | 
		
	
		
			
			|  |  |  | collectionName = titlemap.get(i); | 
		
	
		
			
			|  |  |  | collectionParams = getCollectionParams(excelCollection, collectionName); | 
		
	
		
			
			|  |  |  | titlemap.put(i, collectionName + "_" + value); | 
		
	
		
			
			|  |  |  | } else if (StringUtils.isNotEmpty(collectionName) && collectionParams != null | 
		
	
		
			
			|  |  |  | && collectionParams.getExcelParams() | 
		
	
		
			
			|  |  |  | .containsKey(collectionName + "_" + value)) { | 
		
	
		
			
			|  |  |  | titlemap.put(i, collectionName + "_" + value); | 
		
	
		
			
			|  |  |  | } else { | 
		
	
		
			
			|  |  |  | collectionName = null; | 
		
	
		
			
			|  |  |  | collectionParams = null; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | if (StringUtils.isEmpty(collectionName)) { | 
		
	
		
			
			|  |  |  | titlemap.put(i, value); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | return titlemap; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | /** | 
		
	
		
			
			|  |  |  | * 获取这个名称对应的集合信息 | 
		
	
		
			
			|  |  |  | * @param excelCollection | 
		
	
		
			
			|  |  |  | * @param collectionName | 
		
	
		
			
			|  |  |  | * @return | 
		
	
		
			
			|  |  |  | */ | 
		
	
		
			
			|  |  |  | private ExcelCollectionParams getCollectionParams(List<ExcelCollectionParams> excelCollection, | 
		
	
		
			
			|  |  |  | String collectionName) { | 
		
	
		
			
			|  |  |  | for (ExcelCollectionParams excelCollectionParams : excelCollection) { | 
		
	
		
			
			|  |  |  | if (collectionName.equals(excelCollectionParams.getExcelName())) { | 
		
	
		
			
			|  |  |  | return excelCollectionParams; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | return null; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | /** | 
		
	
		
			
			|  |  |  | * 获取这个名称对应的集合信息 | 
		
	
		
			
			|  |  |  | * @param excelCollection | 
		
	
		
			
			|  |  |  | * @param collectionName | 
		
	
		
			
			|  |  |  | * @return | 
		
	
		
			
			|  |  |  | */ | 
		
	
		
			
			|  |  |  | private ExcelCollectionParams getCollectionParams(List<ExcelCollectionParams> excelCollection, | 
		
	
		
			
			|  |  |  | String collectionName) { | 
		
	
		
			
			|  |  |  | for (ExcelCollectionParams excelCollectionParams : excelCollection) { | 
		
	
		
			
			|  |  |  | if (collectionName.equals(excelCollectionParams.getExcelName())) { | 
		
	
		
			
			|  |  |  | return excelCollectionParams; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | return null; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | /** | 
		
	
		
			
			|  |  |  | * Excel 导入 field 字段类型 Integer,Long,Double,Date,String,Boolean | 
		
	
		
			
			|  |  |  | * | 
		
	
		
			
			|  |  |  | * @param inputstream | 
		
	
		
			
			|  |  |  | * @param pojoClass | 
		
	
		
			
			|  |  |  | * @param params | 
		
	
		
			
			|  |  |  | * @return | 
		
	
		
			
			|  |  |  | * @throws Exception | 
		
	
		
			
			|  |  |  | */ | 
		
	
		
			
			|  |  |  | public ExcelImportResult importExcelByIs(InputStream inputstream, Class<?> pojoClass, | 
		
	
		
			
			|  |  |  | ImportParams params) throws Exception { | 
		
	
		
			
			|  |  |  | if (LOGGER.isDebugEnabled()) { | 
		
	
		
			
			|  |  |  | LOGGER.debug("Excel import start ,class is {}", pojoClass); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | List<T> result = new ArrayList<T>(); | 
		
	
		
			
			|  |  |  | Workbook book = null; | 
		
	
		
			
			|  |  |  | boolean isXSSFWorkbook = true; | 
		
	
		
			
			|  |  |  | if (!(inputstream.markSupported())) { | 
		
	
		
			
			|  |  |  | inputstream = new PushbackInputStream(inputstream, 8); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | if (POIFSFileSystem.hasPOIFSHeader(inputstream)) { | 
		
	
		
			
			|  |  |  | book = new HSSFWorkbook(inputstream); | 
		
	
		
			
			|  |  |  | isXSSFWorkbook = false; | 
		
	
		
			
			|  |  |  | } else if (POIXMLDocument.hasOOXMLHeader(inputstream)) { | 
		
	
		
			
			|  |  |  | book = new XSSFWorkbook(OPCPackage.open(inputstream)); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | createErrorCellStyle(book); | 
		
	
		
			
			|  |  |  | Map<String, PictureData> pictures; | 
		
	
		
			
			|  |  |  | for (int i = params.getStartSheetIndex(); i < params.getStartSheetIndex() | 
		
	
		
			
			|  |  |  | + params.getSheetNum(); i++) { | 
		
	
		
			
			|  |  |  | if (LOGGER.isDebugEnabled()) { | 
		
	
		
			
			|  |  |  | LOGGER.debug(" start to read excel by is ,startTime is {}", new Date().getTime()); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | if (isXSSFWorkbook) { | 
		
	
		
			
			|  |  |  | pictures = PoiPublicUtil.getSheetPictrues07((XSSFSheet) book.getSheetAt(i), | 
		
	
		
			
			|  |  |  | (XSSFWorkbook) book); | 
		
	
		
			
			|  |  |  | } else { | 
		
	
		
			
			|  |  |  | pictures = PoiPublicUtil.getSheetPictrues03((HSSFSheet) book.getSheetAt(i), | 
		
	
		
			
			|  |  |  | (HSSFWorkbook) book); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | if (LOGGER.isDebugEnabled()) { | 
		
	
		
			
			|  |  |  | LOGGER.debug(" end to read excel by is ,endTime is {}", new Date().getTime()); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | result.addAll(importExcel(result, book.getSheetAt(i), pojoClass, params, pictures)); | 
		
	
		
			
			|  |  |  | if (LOGGER.isDebugEnabled()) { | 
		
	
		
			
			|  |  |  | LOGGER.debug(" end to read excel list by pos ,endTime is {}", new Date().getTime()); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | if (params.isNeedSave()) { | 
		
	
		
			
			|  |  |  | saveThisExcel(params, pojoClass, isXSSFWorkbook, book); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | return new ExcelImportResult(result, verfiyFail, book); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | /** | 
		
	
		
			
			|  |  |  | * Excel 导入 field 字段类型 Integer,Long,Double,Date,String,Boolean | 
		
	
		
			
			|  |  |  | * | 
		
	
		
			
			|  |  |  | * @param inputstream | 
		
	
		
			
			|  |  |  | * @param pojoClass | 
		
	
		
			
			|  |  |  | * @param params | 
		
	
		
			
			|  |  |  | * @return | 
		
	
		
			
			|  |  |  | * @throws Exception | 
		
	
		
			
			|  |  |  | */ | 
		
	
		
			
			|  |  |  | public ExcelImportResult importExcelByIs(InputStream inputstream, Class<?> pojoClass, | 
		
	
		
			
			|  |  |  | ImportParams params) throws Exception { | 
		
	
		
			
			|  |  |  | if (LOGGER.isDebugEnabled()) { | 
		
	
		
			
			|  |  |  | LOGGER.debug("Excel import start ,class is {}", pojoClass); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | List<T> result = new ArrayList<T>(); | 
		
	
		
			
			|  |  |  | Workbook book = null; | 
		
	
		
			
			|  |  |  | boolean isXSSFWorkbook = true; | 
		
	
		
			
			|  |  |  | if (!(inputstream.markSupported())) { | 
		
	
		
			
			|  |  |  | inputstream = new PushbackInputStream(inputstream, 8); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | if (POIFSFileSystem.hasPOIFSHeader(inputstream)) { | 
		
	
		
			
			|  |  |  | book = new HSSFWorkbook(inputstream); | 
		
	
		
			
			|  |  |  | isXSSFWorkbook = false; | 
		
	
		
			
			|  |  |  | } else if (POIXMLDocument.hasOOXMLHeader(inputstream)) { | 
		
	
		
			
			|  |  |  | book = new XSSFWorkbook(OPCPackage.open(inputstream)); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | createErrorCellStyle(book); | 
		
	
		
			
			|  |  |  | Map<String, PictureData> pictures; | 
		
	
		
			
			|  |  |  | for (int i = params.getStartSheetIndex(); i < params.getStartSheetIndex() | 
		
	
		
			
			|  |  |  | + params.getSheetNum(); i++) { | 
		
	
		
			
			|  |  |  | if (LOGGER.isDebugEnabled()) { | 
		
	
		
			
			|  |  |  | LOGGER.debug(" start to read excel by is ,startTime is {}", new Date().getTime()); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | if (isXSSFWorkbook) { | 
		
	
		
			
			|  |  |  | pictures = PoiPublicUtil.getSheetPictrues07((XSSFSheet) book.getSheetAt(i), | 
		
	
		
			
			|  |  |  | (XSSFWorkbook) book); | 
		
	
		
			
			|  |  |  | } else { | 
		
	
		
			
			|  |  |  | pictures = PoiPublicUtil.getSheetPictrues03((HSSFSheet) book.getSheetAt(i), | 
		
	
		
			
			|  |  |  | (HSSFWorkbook) book); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | if (LOGGER.isDebugEnabled()) { | 
		
	
		
			
			|  |  |  | LOGGER.debug(" end to read excel by is ,endTime is {}", new Date().getTime()); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | result.addAll(importExcel(result, book.getSheetAt(i), pojoClass, params, pictures)); | 
		
	
		
			
			|  |  |  | if (LOGGER.isDebugEnabled()) { | 
		
	
		
			
			|  |  |  | LOGGER.debug(" end to read excel list by pos ,endTime is {}", new Date().getTime()); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | if (params.isNeedSave()) { | 
		
	
		
			
			|  |  |  | saveThisExcel(params, pojoClass, isXSSFWorkbook, book); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | return new ExcelImportResult(result, verfiyFail, book); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | /** | 
		
	
		
			
			|  |  |  | * 检查是不是合法的模板 | 
		
	
		
			
			|  |  |  | * @param titlemap | 
		
	
		
			
			|  |  |  | * @param excelParams | 
		
	
		
			
			|  |  |  | * @param params | 
		
	
		
			
			|  |  |  | * @param excelCollection | 
		
	
		
			
			|  |  |  | */ | 
		
	
		
			
			|  |  |  | private void checkIsValidTemplate(Map<Integer, String> titlemap, | 
		
	
		
			
			|  |  |  | Map<String, ExcelImportEntity> excelParams, | 
		
	
		
			
			|  |  |  | ImportParams params, | 
		
	
		
			
			|  |  |  | List<ExcelCollectionParams> excelCollection) { | 
		
	
		
			
			|  |  |  | /** | 
		
	
		
			
			|  |  |  | * 检查是不是合法的模板 | 
		
	
		
			
			|  |  |  | * @param titlemap | 
		
	
		
			
			|  |  |  | * @param excelParams | 
		
	
		
			
			|  |  |  | * @param params | 
		
	
		
			
			|  |  |  | * @param excelCollection | 
		
	
		
			
			|  |  |  | */ | 
		
	
		
			
			|  |  |  | private void checkIsValidTemplate(Map<Integer, String> titlemap, | 
		
	
		
			
			|  |  |  | Map<String, ExcelImportEntity> excelParams, | 
		
	
		
			
			|  |  |  | ImportParams params, | 
		
	
		
			
			|  |  |  | List<ExcelCollectionParams> excelCollection) { | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | if (params.getImportFields() != null) { | 
		
	
		
			
			|  |  |  | for (int i = 0, le = params.getImportFields().length; i < le; i++) { | 
		
	
		
			
			|  |  |  | if (!titlemap.containsValue(params.getImportFields()[i])) { | 
		
	
		
			
			|  |  |  | throw new ExcelImportException(ExcelImportEnum.IS_NOT_A_VALID_TEMPLATE); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | } else { | 
		
	
		
			
			|  |  |  | Collection<ExcelImportEntity> collection = excelParams.values(); | 
		
	
		
			
			|  |  |  | for (ExcelImportEntity excelImportEntity : collection) { | 
		
	
		
			
			|  |  |  | if (excelImportEntity.isImportField() | 
		
	
		
			
			|  |  |  | && !titlemap.containsValue(excelImportEntity.getName())) { | 
		
	
		
			
			|  |  |  | LOGGER.error(excelImportEntity.getName() + "必须有,但是没找到"); | 
		
	
		
			
			|  |  |  | throw new ExcelImportException(ExcelImportEnum.IS_NOT_A_VALID_TEMPLATE); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | if (params.getImportFields() != null) { | 
		
	
		
			
			|  |  |  | for (int i = 0, le = params.getImportFields().length; i < le; i++) { | 
		
	
		
			
			|  |  |  | if (!titlemap.containsValue(params.getImportFields()[i])) { | 
		
	
		
			
			|  |  |  | throw new ExcelImportException(ExcelImportEnum.IS_NOT_A_VALID_TEMPLATE); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | } else { | 
		
	
		
			
			|  |  |  | Collection<ExcelImportEntity> collection = excelParams.values(); | 
		
	
		
			
			|  |  |  | for (ExcelImportEntity excelImportEntity : collection) { | 
		
	
		
			
			|  |  |  | if (excelImportEntity.isImportField() | 
		
	
		
			
			|  |  |  | && !titlemap.containsValue(excelImportEntity.getName())) { | 
		
	
		
			
			|  |  |  | LOGGER.error(excelImportEntity.getName() + "必须有,但是没找到"); | 
		
	
		
			
			|  |  |  | throw new ExcelImportException(ExcelImportEnum.IS_NOT_A_VALID_TEMPLATE); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | for (int i = 0, le = excelCollection.size(); i < le; i++) { | 
		
	
		
			
			|  |  |  | ExcelCollectionParams collectionparams = excelCollection.get(i); | 
		
	
		
			
			|  |  |  | collection = collectionparams.getExcelParams().values(); | 
		
	
		
			
			|  |  |  | for (ExcelImportEntity excelImportEntity : collection) { | 
		
	
		
			
			|  |  |  | if (excelImportEntity.isImportField() && !titlemap.containsValue( | 
		
	
		
			
			|  |  |  | collectionparams.getExcelName() + "_" + excelImportEntity.getName())) { | 
		
	
		
			
			|  |  |  | throw new ExcelImportException(ExcelImportEnum.IS_NOT_A_VALID_TEMPLATE); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | for (int i = 0, le = excelCollection.size(); i < le; i++) { | 
		
	
		
			
			|  |  |  | ExcelCollectionParams collectionparams = excelCollection.get(i); | 
		
	
		
			
			|  |  |  | collection = collectionparams.getExcelParams().values(); | 
		
	
		
			
			|  |  |  | for (ExcelImportEntity excelImportEntity : collection) { | 
		
	
		
			
			|  |  |  | if (excelImportEntity.isImportField() && !titlemap.containsValue( | 
		
	
		
			
			|  |  |  | collectionparams.getExcelName() + "_" + excelImportEntity.getName())) { | 
		
	
		
			
			|  |  |  | throw new ExcelImportException(ExcelImportEnum.IS_NOT_A_VALID_TEMPLATE); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | /** | 
		
	
		
			
			|  |  |  | * 保存字段值(获取值,校验值,追加错误信息) | 
		
	
		
			
			|  |  |  | * | 
		
	
		
			
			|  |  |  | * @param params | 
		
	
		
			
			|  |  |  | * @param object | 
		
	
		
			
			|  |  |  | * @param cell | 
		
	
		
			
			|  |  |  | * @param excelParams | 
		
	
		
			
			|  |  |  | * @param titleString | 
		
	
		
			
			|  |  |  | * @param row | 
		
	
		
			
			|  |  |  | * @throws Exception | 
		
	
		
			
			|  |  |  | */ | 
		
	
		
			
			|  |  |  | 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); | 
		
	
		
			
			|  |  |  | if (object instanceof Map) { | 
		
	
		
			
			|  |  |  | if (params.getDataHanlder() != null) { | 
		
	
		
			
			|  |  |  | params.getDataHanlder().setMapValue((Map) object, titleString, value); | 
		
	
		
			
			|  |  |  | } else { | 
		
	
		
			
			|  |  |  | ((Map) object).put(titleString, value); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | } else { | 
		
	
		
			
			|  |  |  | setValues(excelParams.get(titleString), object, value); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | /** | 
		
	
		
			
			|  |  |  | * 保存字段值(获取值,校验值,追加错误信息) | 
		
	
		
			
			|  |  |  | * | 
		
	
		
			
			|  |  |  | * @param params | 
		
	
		
			
			|  |  |  | * @param object | 
		
	
		
			
			|  |  |  | * @param cell | 
		
	
		
			
			|  |  |  | * @param excelParams | 
		
	
		
			
			|  |  |  | * @param titleString | 
		
	
		
			
			|  |  |  | * @param row | 
		
	
		
			
			|  |  |  | * @throws Exception | 
		
	
		
			
			|  |  |  | */ | 
		
	
		
			
			|  |  |  | 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); | 
		
	
		
			
			|  |  |  | if (object instanceof Map) { | 
		
	
		
			
			|  |  |  | if (params.getDataHanlder() != null) { | 
		
	
		
			
			|  |  |  | params.getDataHanlder().setMapValue((Map) object, titleString, value); | 
		
	
		
			
			|  |  |  | } else { | 
		
	
		
			
			|  |  |  | ((Map) object).put(titleString, value); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | } else { | 
		
	
		
			
			|  |  |  | setValues(excelParams.get(titleString), object, value); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | /** | 
		
	
		
			
			|  |  |  | * | 
		
	
		
			
			|  |  |  | * @param object | 
		
	
		
			
			|  |  |  | * @param picId | 
		
	
		
			
			|  |  |  | * @param excelParams | 
		
	
		
			
			|  |  |  | * @param titleString | 
		
	
		
			
			|  |  |  | * @param pictures | 
		
	
		
			
			|  |  |  | * @param params | 
		
	
		
			
			|  |  |  | * @throws Exception | 
		
	
		
			
			|  |  |  | */ | 
		
	
		
			
			|  |  |  | private void saveImage(Object object, String picId, Map<String, ExcelImportEntity> excelParams, | 
		
	
		
			
			|  |  |  | String titleString, Map<String, PictureData> pictures, | 
		
	
		
			
			|  |  |  | ImportParams params) throws Exception { | 
		
	
		
			
			|  |  |  | if (pictures == null) { | 
		
	
		
			
			|  |  |  | return; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | PictureData image = pictures.get(picId); | 
		
	
		
			
			|  |  |  | if (image == null) { | 
		
	
		
			
			|  |  |  | return; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | byte[] data = image.getData(); | 
		
	
		
			
			|  |  |  | String fileName = "pic" + Math.round(Math.random() * 100000000000L); | 
		
	
		
			
			|  |  |  | fileName += "." + PoiPublicUtil.getFileExtendName(data); | 
		
	
		
			
			|  |  |  | if (excelParams.get(titleString).getSaveType() == 1) { | 
		
	
		
			
			|  |  |  | String path = PoiPublicUtil | 
		
	
		
			
			|  |  |  | .getWebRootPath(getSaveUrl(excelParams.get(titleString), object)); | 
		
	
		
			
			|  |  |  | File savefile = new File(path); | 
		
	
		
			
			|  |  |  | if (!savefile.exists()) { | 
		
	
		
			
			|  |  |  | savefile.mkdirs(); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | savefile = new File(path + "/" + fileName); | 
		
	
		
			
			|  |  |  | FileOutputStream fos = new FileOutputStream(savefile); | 
		
	
		
			
			|  |  |  | try { | 
		
	
		
			
			|  |  |  | fos.write(data); | 
		
	
		
			
			|  |  |  | } finally { | 
		
	
		
			
			|  |  |  | IOUtils.closeQuietly(fos); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | setValues(excelParams.get(titleString), object, | 
		
	
		
			
			|  |  |  | getSaveUrl(excelParams.get(titleString), object) + "/" + fileName); | 
		
	
		
			
			|  |  |  | } else { | 
		
	
		
			
			|  |  |  | setValues(excelParams.get(titleString), object, data); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | /** | 
		
	
		
			
			|  |  |  | * | 
		
	
		
			
			|  |  |  | * @param object | 
		
	
		
			
			|  |  |  | * @param picId | 
		
	
		
			
			|  |  |  | * @param excelParams | 
		
	
		
			
			|  |  |  | * @param titleString | 
		
	
		
			
			|  |  |  | * @param pictures | 
		
	
		
			
			|  |  |  | * @param params | 
		
	
		
			
			|  |  |  | * @throws Exception | 
		
	
		
			
			|  |  |  | */ | 
		
	
		
			
			|  |  |  | private void saveImage(Object object, String picId, Map<String, ExcelImportEntity> excelParams, | 
		
	
		
			
			|  |  |  | String titleString, Map<String, PictureData> pictures, | 
		
	
		
			
			|  |  |  | ImportParams params) throws Exception { | 
		
	
		
			
			|  |  |  | if (pictures == null) { | 
		
	
		
			
			|  |  |  | return; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | PictureData image = pictures.get(picId); | 
		
	
		
			
			|  |  |  | if (image == null) { | 
		
	
		
			
			|  |  |  | return; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | byte[] data = image.getData(); | 
		
	
		
			
			|  |  |  | String fileName = "pic" + Math.round(Math.random() * 100000000000L); | 
		
	
		
			
			|  |  |  | fileName += "." + PoiPublicUtil.getFileExtendName(data); | 
		
	
		
			
			|  |  |  | if (excelParams.get(titleString).getSaveType() == 1) { | 
		
	
		
			
			|  |  |  | String path = PoiPublicUtil | 
		
	
		
			
			|  |  |  | .getWebRootPath(getSaveUrl(excelParams.get(titleString), object)); | 
		
	
		
			
			|  |  |  | File savefile = new File(path); | 
		
	
		
			
			|  |  |  | if (!savefile.exists()) { | 
		
	
		
			
			|  |  |  | savefile.mkdirs(); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | savefile = new File(path + "/" + fileName); | 
		
	
		
			
			|  |  |  | FileOutputStream fos = new FileOutputStream(savefile); | 
		
	
		
			
			|  |  |  | try { | 
		
	
		
			
			|  |  |  | fos.write(data); | 
		
	
		
			
			|  |  |  | } finally { | 
		
	
		
			
			|  |  |  | IOUtils.closeQuietly(fos); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | setValues(excelParams.get(titleString), object, | 
		
	
		
			
			|  |  |  | getSaveUrl(excelParams.get(titleString), object) + "/" + fileName); | 
		
	
		
			
			|  |  |  | } else { | 
		
	
		
			
			|  |  |  | setValues(excelParams.get(titleString), object, data); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | private void createErrorCellStyle(Workbook workbook) { | 
		
	
		
			
			|  |  |  | errorCellStyle = workbook.createCellStyle(); | 
		
	
		
			
			|  |  |  | Font font = workbook.createFont(); | 
		
	
		
			
			|  |  |  | font.setColor(Font.COLOR_RED); | 
		
	
		
			
			|  |  |  | errorCellStyle.setFont(font); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | private void createErrorCellStyle(Workbook workbook) { | 
		
	
		
			
			|  |  |  | errorCellStyle = workbook.createCellStyle(); | 
		
	
		
			
			|  |  |  | Font font = workbook.createFont(); | 
		
	
		
			
			|  |  |  | font.setColor(Font.COLOR_RED); | 
		
	
		
			
			|  |  |  | errorCellStyle.setFont(font); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | } |