| @@ -45,8 +45,8 @@ public class FileLoaderImpl implements IFileLoader { | |||||
| if (url.startsWith("http")) { | if (url.startsWith("http")) { | ||||
| URL urlObj = new URL(url); | URL urlObj = new URL(url); | ||||
| URLConnection urlConnection = urlObj.openConnection(); | URLConnection urlConnection = urlObj.openConnection(); | ||||
| urlConnection.setConnectTimeout(30); | |||||
| urlConnection.setReadTimeout(60); | |||||
| urlConnection.setConnectTimeout(30 * 1000); | |||||
| urlConnection.setReadTimeout(60 * 1000); | |||||
| urlConnection.setDoInput(true); | urlConnection.setDoInput(true); | ||||
| fileis = urlConnection.getInputStream(); | fileis = urlConnection.getInputStream(); | ||||
| } else { | } else { | ||||
| @@ -224,8 +224,8 @@ public class CsvImportService extends ImportBaseService { | |||||
| private void saveFieldValue(CsvImportParams params, Object object, String cell, | private void saveFieldValue(CsvImportParams params, Object object, String cell, | ||||
| Map<String, ExcelImportEntity> excelParams, String titleString) throws Exception { | Map<String, ExcelImportEntity> excelParams, String titleString) throws Exception { | ||||
| if (cell.startsWith(params.getTextMark()) && cell.endsWith(params.getTextMark())) { | if (cell.startsWith(params.getTextMark()) && cell.endsWith(params.getTextMark())) { | ||||
| cell = cell.replaceFirst(cell, params.getTextMark()); | |||||
| cell = cell.substring(0, cell.lastIndexOf(params.getTextMark())); | |||||
| //FIXED 字符串截取时考虑的情况不全面导致的BUG | |||||
| cell = cell.substring(params.getTextMark().length(), cell.lastIndexOf(params.getTextMark())); | |||||
| } | } | ||||
| Object value = cellValueServer.getValue(params.getDataHandler(), object, cell, excelParams, | Object value = cellValueServer.getValue(params.getDataHandler(), object, cell, excelParams, | ||||
| titleString, params.getDictHandler()); | titleString, params.getDictHandler()); | ||||
| @@ -45,6 +45,9 @@ public final class ExcelExportUtil { | |||||
| } | } | ||||
| /** | /** | ||||
| * 大数据量导出,方便导出时集合不用一次生成,可以多次生成,多次调用, | |||||
| * 调用完成或需要调用关闭函数(closeExportBigExcel) | |||||
| * | |||||
| * @param entity | * @param entity | ||||
| * 表格标题属性 | * 表格标题属性 | ||||
| * @param pojoClass | * @param pojoClass | ||||
| @@ -59,6 +62,14 @@ public final class ExcelExportUtil { | |||||
| return batchService.appendData(dataSet); | return batchService.appendData(dataSet); | ||||
| } | } | ||||
| /** | |||||
| * 大数据量导出,方便导出时集合不用一次生成,可以多次生成,多次调用, | |||||
| * 调用完成或需要调用关闭函数(closeExportBigExcel) | |||||
| * @param entity | |||||
| * @param excelParams | |||||
| * @param dataSet | |||||
| * @return | |||||
| */ | |||||
| public static Workbook exportBigExcel(ExportParams entity, List<ExcelExportEntity> excelParams, | public static Workbook exportBigExcel(ExportParams entity, List<ExcelExportEntity> excelParams, | ||||
| Collection<?> dataSet) { | Collection<?> dataSet) { | ||||
| ExcelBatchExportService batchService = ExcelBatchExportService | ExcelBatchExportService batchService = ExcelBatchExportService | ||||
| @@ -66,6 +77,9 @@ public final class ExcelExportUtil { | |||||
| return batchService.appendData(dataSet); | return batchService.appendData(dataSet); | ||||
| } | } | ||||
| /** | |||||
| * 执行完成上述方法后,请关闭 | |||||
| */ | |||||
| public static void closeExportBigExcel() { | public static void closeExportBigExcel() { | ||||
| ExcelBatchExportService batchService = ExcelBatchExportService.getCurrentExcelBatchExportService(); | ExcelBatchExportService batchService = ExcelBatchExportService.getCurrentExcelBatchExportService(); | ||||
| if(batchService != null) { | if(batchService != null) { | ||||
| @@ -115,7 +129,7 @@ public final class ExcelExportUtil { | |||||
| } | } | ||||
| /** | /** | ||||
| * 一个excel 创建多个sheet | |||||
| * 根据Map创建对应的Excel(一个excel 创建多个sheet) | |||||
| * | * | ||||
| * @param list | * @param list | ||||
| * 多个Map key title 对应表格Title key entity 对应表格对应实体 key data | * 多个Map key title 对应表格Title key entity 对应表格对应实体 key data | ||||
| @@ -68,10 +68,11 @@ public class ExportParams extends ExcelBaseParams { | |||||
| */ | */ | ||||
| private int freezeCol; | private int freezeCol; | ||||
| /** | /** | ||||
| * 表头颜色 | |||||
| * 表头颜色 & 标题颜色 | |||||
| */ | */ | ||||
| private short color = HSSFColor.HSSFColorPredefined.WHITE.getIndex(); | private short color = HSSFColor.HSSFColorPredefined.WHITE.getIndex(); | ||||
| /** | /** | ||||
| * 第二行标题颜色 | |||||
| * 属性说明行的颜色 例如:HSSFColor.SKY_BLUE.index 默认 | * 属性说明行的颜色 例如:HSSFColor.SKY_BLUE.index 默认 | ||||
| */ | */ | ||||
| private short headerColor = HSSFColor.HSSFColorPredefined.SKY_BLUE.getIndex(); | private short headerColor = HSSFColor.HSSFColorPredefined.SKY_BLUE.getIndex(); | ||||
| @@ -114,7 +115,7 @@ public class ExportParams extends ExcelBaseParams { | |||||
| * 导出时在excel中每个列的高度 单位为字符,一个汉字=2个字符 | * 导出时在excel中每个列的高度 单位为字符,一个汉字=2个字符 | ||||
| * 全局设置,优先使用 | * 全局设置,优先使用 | ||||
| */ | */ | ||||
| public short height = 0; | |||||
| private short height = 0; | |||||
| public ExportParams() { | public ExportParams() { | ||||
| @@ -0,0 +1,72 @@ | |||||
| package cn.afterturn.easypoi.excel.entity; | |||||
| /** | |||||
| * 统计对象 | |||||
| * | |||||
| * @author JueYue | |||||
| */ | |||||
| public class TemplateSumEntity { | |||||
| /** | |||||
| * CELL的值 | |||||
| */ | |||||
| private String cellValue; | |||||
| /** | |||||
| * 需要计算的KEY | |||||
| */ | |||||
| private String sumKey; | |||||
| /** | |||||
| * 列 | |||||
| */ | |||||
| private int col; | |||||
| /** | |||||
| * 行 | |||||
| */ | |||||
| private int row; | |||||
| /** | |||||
| * 最后值 | |||||
| */ | |||||
| private double value; | |||||
| public String getCellValue() { | |||||
| return cellValue; | |||||
| } | |||||
| public void setCellValue(String cellValue) { | |||||
| this.cellValue = cellValue; | |||||
| } | |||||
| public String getSumKey() { | |||||
| return sumKey; | |||||
| } | |||||
| public void setSumKey(String sumKey) { | |||||
| this.sumKey = sumKey; | |||||
| } | |||||
| public int getCol() { | |||||
| return col; | |||||
| } | |||||
| public void setCol(int col) { | |||||
| this.col = col; | |||||
| } | |||||
| public int getRow() { | |||||
| return row; | |||||
| } | |||||
| public void setRow(int row) { | |||||
| this.row = row; | |||||
| } | |||||
| public double getValue() { | |||||
| return value; | |||||
| } | |||||
| public void setValue(double value) { | |||||
| this.value = value; | |||||
| } | |||||
| } | |||||
| @@ -13,5 +13,6 @@ package cn.afterturn.easypoi.excel.entity.vo; | |||||
| public interface BaseEntityTypeConstants { | public interface BaseEntityTypeConstants { | ||||
| public final static Integer STRING_TYPE = 1; | public final static Integer STRING_TYPE = 1; | ||||
| public final static Integer DOUBLE_TYPE = 10; | public final static Integer DOUBLE_TYPE = 10; | ||||
| public final static Integer IMAGE_TYPE = 3; | |||||
| public final static Integer IMAGE_TYPE = 2; | |||||
| public final static Integer FUNCTION_TYPE = 3; | |||||
| } | } | ||||
| @@ -139,6 +139,7 @@ public class ExcelBatchExportService extends ExcelExportService { | |||||
| ? createHeaderAndTitle(entity, sheet, workbook, excelParams) : 0; | ? createHeaderAndTitle(entity, sheet, workbook, excelParams) : 0; | ||||
| titleHeight = index; | titleHeight = index; | ||||
| setCellWith(excelParams, sheet); | setCellWith(excelParams, sheet); | ||||
| setColumnHidden(excelParams,sheet); | |||||
| rowHeight = getRowHeight(excelParams); | rowHeight = getRowHeight(excelParams); | ||||
| setCurrentIndex(1); | setCurrentIndex(1); | ||||
| } catch (Exception e) { | } catch (Exception e) { | ||||
| @@ -173,7 +174,7 @@ public class ExcelBatchExportService extends ExcelExportService { | |||||
| public void closeExportBigExcel() { | public void closeExportBigExcel() { | ||||
| if (entity.getFreezeCol() != 0) { | if (entity.getFreezeCol() != 0) { | ||||
| sheet.createFreezePane(entity.getFreezeCol(), 0, entity.getFreezeCol(), 0); | |||||
| sheet.createFreezePane(entity.getFreezeCol(), titleHeight, entity.getFreezeCol(), titleHeight); | |||||
| } | } | ||||
| mergeCells(sheet, excelParams, titleHeight); | mergeCells(sheet, excelParams, titleHeight); | ||||
| // 创建合计信息 | // 创建合计信息 | ||||
| @@ -82,7 +82,7 @@ public class ExcelExportService extends BaseExportService { | |||||
| for (int i = 0, exportFieldTitleSize = excelParams.size(); i < exportFieldTitleSize; i++) { | for (int i = 0, exportFieldTitleSize = excelParams.size(); i < exportFieldTitleSize; i++) { | ||||
| ExcelExportEntity entity = excelParams.get(i); | ExcelExportEntity entity = excelParams.get(i); | ||||
| // 加入换了groupName或者结束就,就把之前的那个换行 | // 加入换了groupName或者结束就,就把之前的那个换行 | ||||
| if (StringUtils.isBlank(entity.getGroupName()) || i = 0 || !entity.getGroupName().equals(excelParams.get(i - 1).getGroupName())) { | |||||
| if (StringUtils.isBlank(entity.getGroupName()) || i == 0 || !entity.getGroupName().equals(excelParams.get(i - 1).getGroupName())) { | |||||
| if (groupCellLength > 1) { | if (groupCellLength > 1) { | ||||
| sheet.addMergedRegion(new CellRangeAddress(index, index, cellIndex - groupCellLength, cellIndex - 1)); | sheet.addMergedRegion(new CellRangeAddress(index, index, cellIndex - groupCellLength, cellIndex - 1)); | ||||
| } | } | ||||
| @@ -13,22 +13,6 @@ | |||||
| */ | */ | ||||
| package cn.afterturn.easypoi.excel.export.base; | package cn.afterturn.easypoi.excel.export.base; | ||||
| import org.apache.commons.lang3.StringUtils; | |||||
| import org.apache.commons.lang3.builder.ReflectionToStringBuilder; | |||||
| import org.apache.poi.hssf.usermodel.HSSFClientAnchor; | |||||
| import org.apache.poi.hssf.usermodel.HSSFRichTextString; | |||||
| import org.apache.poi.ss.usermodel.*; | |||||
| import org.apache.poi.ss.util.CellRangeAddress; | |||||
| import org.apache.poi.xssf.usermodel.XSSFClientAnchor; | |||||
| import org.apache.poi.xssf.usermodel.XSSFRichTextString; | |||||
| import java.text.DecimalFormat; | |||||
| import java.util.Collection; | |||||
| import java.util.HashMap; | |||||
| import java.util.List; | |||||
| import java.util.Map; | |||||
| import java.util.Set; | |||||
| import cn.afterturn.easypoi.cache.ImageCache; | import cn.afterturn.easypoi.cache.ImageCache; | ||||
| import cn.afterturn.easypoi.excel.entity.enmus.ExcelType; | import cn.afterturn.easypoi.excel.entity.enmus.ExcelType; | ||||
| import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity; | import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity; | ||||
| @@ -40,6 +24,16 @@ import cn.afterturn.easypoi.exception.excel.enums.ExcelExportEnum; | |||||
| import cn.afterturn.easypoi.util.PoiExcelGraphDataUtil; | import cn.afterturn.easypoi.util.PoiExcelGraphDataUtil; | ||||
| import cn.afterturn.easypoi.util.PoiMergeCellUtil; | import cn.afterturn.easypoi.util.PoiMergeCellUtil; | ||||
| import cn.afterturn.easypoi.util.PoiPublicUtil; | import cn.afterturn.easypoi.util.PoiPublicUtil; | ||||
| import org.apache.commons.lang3.StringUtils; | |||||
| import org.apache.commons.lang3.builder.ReflectionToStringBuilder; | |||||
| import org.apache.poi.hssf.usermodel.HSSFClientAnchor; | |||||
| import org.apache.poi.hssf.usermodel.HSSFRichTextString; | |||||
| import org.apache.poi.ss.usermodel.*; | |||||
| import org.apache.poi.xssf.usermodel.XSSFClientAnchor; | |||||
| import org.apache.poi.xssf.usermodel.XSSFRichTextString; | |||||
| import java.text.DecimalFormat; | |||||
| import java.util.*; | |||||
| /** | /** | ||||
| * 提供POI基础操作服务 | * 提供POI基础操作服务 | ||||
| @@ -67,37 +61,31 @@ public abstract class BaseExportService extends ExportCommonService { | |||||
| short rowHeight, int cellNum) { | short rowHeight, int cellNum) { | ||||
| try { | try { | ||||
| ExcelExportEntity entity; | ExcelExportEntity entity; | ||||
| Row row = sheet.getRow(index) == null ? sheet.createRow(index) : sheet.getRow(index); | |||||
| Row row = sheet.getRow(index) == null ? sheet.createRow(index) : sheet.getRow(index); | |||||
| if (rowHeight != -1) { | if (rowHeight != -1) { | ||||
| row.setHeight(rowHeight); | row.setHeight(rowHeight); | ||||
| } | } | ||||
| int maxHeight = 1; | |||||
| int maxHeight = 1, listMaxHeight = 1; | |||||
| // 合并需要合并的单元格 | // 合并需要合并的单元格 | ||||
| int margeCellNum = cellNum; | int margeCellNum = cellNum; | ||||
| int indexKey = createIndexCell(row, index, excelParams.get(0)); | |||||
| int indexKey = createIndexCell(row, index, excelParams.get(0)); | |||||
| cellNum += indexKey; | cellNum += indexKey; | ||||
| for (int k = indexKey, paramSize = excelParams.size(); k < paramSize; k++) { | for (int k = indexKey, paramSize = excelParams.size(); k < paramSize; k++) { | ||||
| entity = excelParams.get(k); | entity = excelParams.get(k); | ||||
| if (entity.getList() != null) { | if (entity.getList() != null) { | ||||
| Collection<?> list = getListCellValue(entity, t); | |||||
| int listC = 0; | |||||
| Collection<?> list = getListCellValue(entity, t); | |||||
| int listIndex = 0, tmpListHeight = 0; | |||||
| if (list != null && list.size() > 0) { | if (list != null && list.size() > 0) { | ||||
| int tempCellNum = 0; | int tempCellNum = 0; | ||||
| for (Object obj : list) { | for (Object obj : list) { | ||||
| int[] temp = createCells(patriarch, index + maxHeight - 1, obj, entity.getList(), sheet, workbook, rowHeight, cellNum); | |||||
| int[] temp = createCells(patriarch, index + listIndex, obj, entity.getList(), sheet, workbook, rowHeight, cellNum); | |||||
| tempCellNum = temp[1]; | tempCellNum = temp[1]; | ||||
| maxHeight += temp[0]; | |||||
| /*createListCells(patriarch, index + listC, cellNum, obj, entity.getList(), | |||||
| sheet, workbook, rowHeight); | |||||
| listC++;*/ | |||||
| tmpListHeight += temp[0]; | |||||
| listIndex++; | |||||
| } | } | ||||
| cellNum = tempCellNum; | cellNum = tempCellNum; | ||||
| maxHeight--; | |||||
| listMaxHeight = Math.max(listMaxHeight, tmpListHeight); | |||||
| } | } | ||||
| /* cellNum += entity.getList().size(); | |||||
| if (list != null && list.size() > maxHeight) { | |||||
| maxHeight = list.size(); | |||||
| }*/ | |||||
| } else { | } else { | ||||
| Object value = getCellValue(entity, t); | Object value = getCellValue(entity, t); | ||||
| @@ -126,6 +114,10 @@ public abstract class BaseExportService extends ExportCommonService { | |||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| maxHeight += listMaxHeight - 1; | |||||
| if(indexKey == 1 && excelParams.get(1).isNeedMerge()) { | |||||
| excelParams.get(0).setNeedMerge(true); | |||||
| } | |||||
| for (int k = indexKey, paramSize = excelParams.size(); k < paramSize; k++) { | for (int k = indexKey, paramSize = excelParams.size(); k < paramSize; k++) { | ||||
| entity = excelParams.get(k); | entity = excelParams.get(k); | ||||
| if (entity.getList() != null) { | if (entity.getList() != null) { | ||||
| @@ -153,7 +145,7 @@ public abstract class BaseExportService extends ExportCommonService { | |||||
| */ | */ | ||||
| public void createImageCell(Drawing patriarch, ExcelExportEntity entity, Row row, int i, | public void createImageCell(Drawing patriarch, ExcelExportEntity entity, Row row, int i, | ||||
| String imagePath, Object obj) throws Exception { | String imagePath, Object obj) throws Exception { | ||||
| Cell cell = row.createCell(i); | |||||
| Cell cell = row.createCell(i); | |||||
| byte[] value = null; | byte[] value = null; | ||||
| if (entity.getExportImageType() != 1) { | if (entity.getExportImageType() != 1) { | ||||
| value = (byte[]) (entity.getMethods() != null | value = (byte[]) (entity.getMethods() != null | ||||
| @@ -191,6 +183,32 @@ public abstract class BaseExportService extends ExportCommonService { | |||||
| } | } | ||||
| /** | |||||
| * 图片类型的Cell | |||||
| */ | |||||
| public void createImageCell(Cell cell, double height, int rowspan, int colspan, | |||||
| String imagePath, byte[] data) throws Exception { | |||||
| if (height > cell.getRow().getHeight()) { | |||||
| cell.getRow().setHeight((short) height); | |||||
| } | |||||
| ClientAnchor anchor; | |||||
| if (type.equals(ExcelType.HSSF)) { | |||||
| anchor = new HSSFClientAnchor(0, 0, 0, 0, (short) cell.getColumnIndex(), cell.getRow().getRowNum(), (short) (cell.getColumnIndex() + colspan), | |||||
| cell.getRow().getRowNum() + rowspan); | |||||
| } else { | |||||
| anchor = new XSSFClientAnchor(0, 0, 0, 0, (short) cell.getColumnIndex(), cell.getRow().getRowNum(), (short) (cell.getColumnIndex() + colspan), | |||||
| cell.getRow().getRowNum() + rowspan); | |||||
| } | |||||
| if (StringUtils.isNotEmpty(imagePath)) { | |||||
| data = ImageCache.getImage(imagePath); | |||||
| } | |||||
| if (data != null) { | |||||
| PoiExcelGraphDataUtil.getDrawingPatriarch(cell.getSheet()).createPicture(anchor, | |||||
| cell.getSheet().getWorkbook().addPicture(data, getImageType(data))); | |||||
| } | |||||
| } | |||||
| private int createIndexCell(Row row, int index, ExcelExportEntity excelExportEntity) { | private int createIndexCell(Row row, int index, ExcelExportEntity excelExportEntity) { | ||||
| if (excelExportEntity.getName() != null && "序号".equals(excelExportEntity.getName()) && excelExportEntity.getFormat() != null | if (excelExportEntity.getName() != null && "序号".equals(excelExportEntity.getName()) && excelExportEntity.getFormat() != null | ||||
| && excelExportEntity.getFormat().equals(PoiBaseConstants.IS_ADD_INDEX)) { | && excelExportEntity.getFormat().equals(PoiBaseConstants.IS_ADD_INDEX)) { | ||||
| @@ -209,7 +227,7 @@ public abstract class BaseExportService extends ExportCommonService { | |||||
| List<ExcelExportEntity> excelParams, Sheet sheet, | List<ExcelExportEntity> excelParams, Sheet sheet, | ||||
| Workbook workbook, short rowHeight) throws Exception { | Workbook workbook, short rowHeight) throws Exception { | ||||
| ExcelExportEntity entity; | ExcelExportEntity entity; | ||||
| Row row; | |||||
| Row row; | |||||
| if (sheet.getRow(index) == null) { | if (sheet.getRow(index) == null) { | ||||
| row = sheet.createRow(index); | row = sheet.createRow(index); | ||||
| if (rowHeight != -1) { | if (rowHeight != -1) { | ||||
| @@ -285,7 +303,7 @@ public abstract class BaseExportService extends ExportCommonService { | |||||
| try { | try { | ||||
| cell.setCellValue(Double.parseDouble(text)); | cell.setCellValue(Double.parseDouble(text)); | ||||
| } catch (NumberFormatException e) { | } catch (NumberFormatException e) { | ||||
| cell.setCellType(Cell.CELL_TYPE_STRING); | |||||
| cell.setCellType(CellType.STRING); | |||||
| cell.setCellValue(text); | cell.setCellValue(text); | ||||
| } | } | ||||
| } | } | ||||
| @@ -304,7 +322,7 @@ public abstract class BaseExportService extends ExportCommonService { | |||||
| if (LOGGER.isDebugEnabled()) { | if (LOGGER.isDebugEnabled()) { | ||||
| LOGGER.debug("add statistics data ,size is {}", statistics.size()); | LOGGER.debug("add statistics data ,size is {}", statistics.size()); | ||||
| } | } | ||||
| Row row = sheet.createRow(sheet.getLastRowNum() + 1); | |||||
| Row row = sheet.createRow(sheet.getLastRowNum() + 1); | |||||
| Set<Integer> keys = statistics.keySet(); | Set<Integer> keys = statistics.keySet(); | ||||
| createStringCell(row, 0, "合计", styles, null); | createStringCell(row, 0, "合计", styles, null); | ||||
| for (Integer key : keys) { | for (Integer key : keys) { | ||||
| @@ -39,6 +39,7 @@ import java.lang.reflect.Method; | |||||
| import java.lang.reflect.ParameterizedType; | import java.lang.reflect.ParameterizedType; | ||||
| import java.text.DecimalFormat; | import java.text.DecimalFormat; | ||||
| import java.text.SimpleDateFormat; | import java.text.SimpleDateFormat; | ||||
| import java.time.Instant; | |||||
| import java.time.LocalDate; | import java.time.LocalDate; | ||||
| import java.time.LocalDateTime; | import java.time.LocalDateTime; | ||||
| import java.time.ZoneId; | import java.time.ZoneId; | ||||
| @@ -86,7 +87,10 @@ public class ExportCommonService { | |||||
| temp = format.parse(value.toString()); | temp = format.parse(value.toString()); | ||||
| } else if (value instanceof Date) { | } else if (value instanceof Date) { | ||||
| temp = (Date) value; | temp = (Date) value; | ||||
| } else if (value instanceof LocalDate) { | |||||
| } else if (value instanceof Instant) { | |||||
| Instant instant = (Instant)value; | |||||
| temp = Date.from(instant); | |||||
| } else if (value instanceof LocalDate) { | |||||
| LocalDate localDate = (LocalDate)value; | LocalDate localDate = (LocalDate)value; | ||||
| temp = Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); | temp = Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); | ||||
| } else if(value instanceof LocalDateTime){ | } else if(value instanceof LocalDateTime){ | ||||
| @@ -28,6 +28,7 @@ import java.util.List; | |||||
| import java.util.Map; | import java.util.Map; | ||||
| import java.util.Set; | import java.util.Set; | ||||
| import cn.afterturn.easypoi.excel.entity.TemplateSumEntity; | |||||
| import cn.afterturn.easypoi.util.*; | import cn.afterturn.easypoi.util.*; | ||||
| import org.apache.commons.lang3.StringUtils; | import org.apache.commons.lang3.StringUtils; | ||||
| import org.apache.poi.ss.usermodel.*; | import org.apache.poi.ss.usermodel.*; | ||||
| @@ -45,7 +46,6 @@ import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity; | |||||
| import cn.afterturn.easypoi.excel.entity.params.ExcelForEachParams; | import cn.afterturn.easypoi.excel.entity.params.ExcelForEachParams; | ||||
| import cn.afterturn.easypoi.excel.export.base.BaseExportService; | import cn.afterturn.easypoi.excel.export.base.BaseExportService; | ||||
| import cn.afterturn.easypoi.excel.export.styler.IExcelExportStyler; | import cn.afterturn.easypoi.excel.export.styler.IExcelExportStyler; | ||||
| import cn.afterturn.easypoi.excel.export.template.TemplateSumHandler.TemplateSumEntity; | |||||
| import cn.afterturn.easypoi.excel.html.helper.MergedRegionHelper; | import cn.afterturn.easypoi.excel.html.helper.MergedRegionHelper; | ||||
| import cn.afterturn.easypoi.exception.excel.ExcelExportException; | import cn.afterturn.easypoi.exception.excel.ExcelExportException; | ||||
| import cn.afterturn.easypoi.exception.excel.enums.ExcelExportEnum; | import cn.afterturn.easypoi.exception.excel.enums.ExcelExportEnum; | ||||
| @@ -320,10 +320,13 @@ public final class ExcelExportOfTemplateUtil extends BaseExportService { | |||||
| } | } | ||||
| //修改需要处理的统计值 | //修改需要处理的统计值 | ||||
| hanlderSumCell(sheet); | |||||
| handlerSumCell(sheet); | |||||
| //修复因为调用shiftRows而被破坏的合并单元格 | |||||
| mergedRegionHelper.mergeOtherCell(sheet); | |||||
| } | } | ||||
| private void hanlderSumCell(Sheet sheet) { | |||||
| private void handlerSumCell(Sheet sheet) { | |||||
| for (TemplateSumEntity sumEntity : templateSumHandler.getDataList()) { | for (TemplateSumEntity sumEntity : templateSumHandler.getDataList()) { | ||||
| Cell cell = sheet.getRow(sumEntity.getRow()).getCell(sumEntity.getCol()); | Cell cell = sheet.getRow(sumEntity.getRow()).getCell(sumEntity.getCol()); | ||||
| cell.setCellValue(cell.getStringCellValue() | cell.setCellValue(cell.getStringCellValue() | ||||
| @@ -463,7 +466,7 @@ public final class ExcelExportOfTemplateUtil extends BaseExportService { | |||||
| PoiMergeCellUtil.addMergedRegion(cell.getSheet(), cell.getRowIndex(), | PoiMergeCellUtil.addMergedRegion(cell.getSheet(), cell.getRowIndex(), | ||||
| cell.getRowIndex() + img.getRowspan() - 1, cell.getColumnIndex(), cell.getColumnIndex() + img.getColspan() - 1); | cell.getRowIndex() + img.getRowspan() - 1, cell.getColumnIndex(), cell.getColumnIndex() + img.getColspan() - 1); | ||||
| } | } | ||||
| createImageCell(cell, img.getHeight(), img.getUrl(), img.getData()); | |||||
| createImageCell(cell, img.getHeight(), img.getRowspan(), img.getColspan(), img.getUrl(), img.getData()); | |||||
| } else if (isNumber && StringUtils.isNotBlank(obj.toString())) { | } else if (isNumber && StringUtils.isNotBlank(obj.toString())) { | ||||
| cell.setCellValue(Double.parseDouble(obj.toString())); | cell.setCellValue(Double.parseDouble(obj.toString())); | ||||
| cell.setCellType(CellType.NUMERIC); | cell.setCellType(CellType.NUMERIC); | ||||
| @@ -576,7 +579,12 @@ public final class ExcelExportOfTemplateUtil extends BaseExportService { | |||||
| if (obj != null && obj instanceof ImageEntity) { | if (obj != null && obj instanceof ImageEntity) { | ||||
| ImageEntity img = (ImageEntity) obj; | ImageEntity img = (ImageEntity) obj; | ||||
| row.getCell(ci).setCellValue(""); | row.getCell(ci).setCellValue(""); | ||||
| createImageCell(row.getCell(ci), img.getHeight(), img.getUrl(), img.getData()); | |||||
| if (img.getRowspan()>1 || img.getColspan() > 1){ | |||||
| img.setHeight(0); | |||||
| row.getCell(ci).getSheet().addMergedRegion(new CellRangeAddress(row.getCell(ci).getRowIndex(), | |||||
| row.getCell(ci).getRowIndex() + img.getRowspan() - 1, row.getCell(ci).getColumnIndex(), row.getCell(ci).getColumnIndex() + img.getColspan() -1)); | |||||
| } | |||||
| createImageCell(row.getCell(ci), img.getHeight(),img.getRowspan(),img.getColspan(), img.getUrl(), img.getData()); | |||||
| } else if (isNumber && StringUtils.isNotEmpty(val)) { | } else if (isNumber && StringUtils.isNotEmpty(val)) { | ||||
| row.getCell(ci).setCellValue(Double.parseDouble(val)); | row.getCell(ci).setCellValue(Double.parseDouble(val)); | ||||
| row.getCell(ci).setCellType(CellType.NUMERIC); | row.getCell(ci).setCellType(CellType.NUMERIC); | ||||
| @@ -596,7 +604,8 @@ public final class ExcelExportOfTemplateUtil extends BaseExportService { | |||||
| setMergedRegionStyle(row, ci, params); | setMergedRegionStyle(row, ci, params); | ||||
| //合并对应单元格 | //合并对应单元格 | ||||
| if ((params.getRowspan() != 1 || params.getColspan() != 1) | if ((params.getRowspan() != 1 || params.getColspan() != 1) | ||||
| && !mergedRegionHelper.isMergedRegion(row.getRowNum() + 1, ci)) { | |||||
| && !mergedRegionHelper.isMergedRegion(row.getRowNum() + 1, ci) | |||||
| && PoiCellUtil.isMergedRegion(row.getSheet(), row.getRowNum(), ci)) { | |||||
| PoiMergeCellUtil.addMergedRegion(row.getSheet(), row.getRowNum(), | PoiMergeCellUtil.addMergedRegion(row.getSheet(), row.getRowNum(), | ||||
| row.getRowNum() + params.getRowspan() - 1, ci, | row.getRowNum() + params.getRowspan() - 1, ci, | ||||
| ci + params.getColspan() - 1); | ci + params.getColspan() - 1); | ||||
| @@ -7,6 +7,7 @@ import java.util.HashMap; | |||||
| import java.util.List; | import java.util.List; | ||||
| import java.util.Map; | import java.util.Map; | ||||
| import cn.afterturn.easypoi.excel.entity.TemplateSumEntity; | |||||
| 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.Row; | import org.apache.poi.ss.usermodel.Row; | ||||
| @@ -127,72 +128,5 @@ public class TemplateSumHandler { | |||||
| return -1; | return -1; | ||||
| } | } | ||||
| /** | |||||
| * 统计对象 | |||||
| * @author JueYue | |||||
| */ | |||||
| protected class TemplateSumEntity { | |||||
| /** | |||||
| * CELL的值 | |||||
| */ | |||||
| private String cellValue; | |||||
| /** | |||||
| * 需要计算的KEY | |||||
| */ | |||||
| private String sumKey; | |||||
| /** | |||||
| * 列 | |||||
| */ | |||||
| private int col; | |||||
| /** | |||||
| * 行 | |||||
| */ | |||||
| private int row; | |||||
| /** | |||||
| * 最后值 | |||||
| */ | |||||
| private double value; | |||||
| public String getCellValue() { | |||||
| return cellValue; | |||||
| } | |||||
| public void setCellValue(String cellValue) { | |||||
| this.cellValue = cellValue; | |||||
| } | |||||
| public String getSumKey() { | |||||
| return sumKey; | |||||
| } | |||||
| public void setSumKey(String sumKey) { | |||||
| this.sumKey = sumKey; | |||||
| } | |||||
| public int getCol() { | |||||
| return col; | |||||
| } | |||||
| public void setCol(int col) { | |||||
| this.col = col; | |||||
| } | |||||
| public int getRow() { | |||||
| return row; | |||||
| } | |||||
| public void setRow(int row) { | |||||
| this.row = row; | |||||
| } | |||||
| public double getValue() { | |||||
| return value; | |||||
| } | |||||
| public void setValue(double value) { | |||||
| this.value = value; | |||||
| } | |||||
| } | |||||
| } | } | ||||
| @@ -5,6 +5,7 @@ import java.util.HashSet; | |||||
| import java.util.Map; | import java.util.Map; | ||||
| import java.util.Set; | import java.util.Set; | ||||
| import cn.afterturn.easypoi.util.PoiCellUtil; | |||||
| import cn.afterturn.easypoi.util.PoiMergeCellUtil; | import cn.afterturn.easypoi.util.PoiMergeCellUtil; | ||||
| import org.apache.poi.ss.usermodel.Sheet; | import org.apache.poi.ss.usermodel.Sheet; | ||||
| import org.apache.poi.ss.util.CellRangeAddress; | import org.apache.poi.ss.util.CellRangeAddress; | ||||
| @@ -123,4 +124,23 @@ public class MergedRegionHelper { | |||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| /** | |||||
| * 把破坏的单元格合并(POI的shiftRows方法会把移动的行的合并单元格拆分) | |||||
| * @return | |||||
| */ | |||||
| public void mergeOtherCell(Sheet sheet) { | |||||
| Set<String> tempMergeKeySet = mergedCache.keySet(); | |||||
| for(String mergeKey : tempMergeKeySet) { | |||||
| String[] row_col = mergeKey.split("_"); | |||||
| if(!PoiCellUtil.isMergedRegion(sheet, Integer.valueOf(row_col[0]) - 1, Integer.valueOf(row_col[1]))) { | |||||
| Integer[] mergeCellValue = mergedCache.get(mergeKey); | |||||
| sheet.addMergedRegion(new CellRangeAddress(Integer.valueOf(row_col[0]) - 1, | |||||
| Integer.valueOf(row_col[0]) - 1 + mergeCellValue[0] - 1, Integer.valueOf(row_col[1]), | |||||
| Integer.valueOf(row_col[1]) + mergeCellValue[1] - 1)); | |||||
| } | |||||
| } | |||||
| } | |||||
| } | } | ||||
| @@ -38,6 +38,8 @@ import java.sql.Time; | |||||
| import java.sql.Timestamp; | import java.sql.Timestamp; | ||||
| import java.text.ParseException; | import java.text.ParseException; | ||||
| import java.text.SimpleDateFormat; | import java.text.SimpleDateFormat; | ||||
| import java.time.LocalDate; | |||||
| import java.time.ZoneId; | |||||
| import java.util.Arrays; | import java.util.Arrays; | ||||
| import java.util.Date; | import java.util.Date; | ||||
| import java.util.List; | import java.util.List; | ||||
| @@ -70,15 +72,10 @@ public class CellValueService { | |||||
| Object result = null; | Object result = null; | ||||
| if ("class java.util.Date".equals(classFullName) || "class java.sql.Date".equals(classFullName) | if ("class java.util.Date".equals(classFullName) || "class java.sql.Date".equals(classFullName) | ||||
| || ("class java.sql.Time").equals(classFullName) | || ("class java.sql.Time").equals(classFullName) | ||||
| || ("class java.time.Instant").equals(classFullName) | |||||
| || ("class java.time.LocalDate").equals(classFullName) | |||||
| || ("class java.time.LocalDateTime").equals(classFullName) | |||||
| || ("class java.sql.Timestamp").equals(classFullName)) { | || ("class java.sql.Timestamp").equals(classFullName)) { | ||||
| /* | |||||
| if (Cell.CELL_TYPE_NUMERIC == cell.getCellType()) { | |||||
| // 日期格式 | |||||
| result = cell.getDateCellValue(); | |||||
| } else { | |||||
| cell.setCellType(Cell.CELL_TYPE_STRING); | |||||
| result = getDateData(entity, cell.getStringCellValue()); | |||||
| }*/ | |||||
| //FIX: 单元格yyyyMMdd数字时候使用 cell.getDateCellValue() 解析出的日期错误 | //FIX: 单元格yyyyMMdd数字时候使用 cell.getDateCellValue() 解析出的日期错误 | ||||
| if (CellType.NUMERIC == cell.getCellType() && DateUtil.isCellDateFormatted(cell)) { | if (CellType.NUMERIC == cell.getCellType() && DateUtil.isCellDateFormatted(cell)) { | ||||
| result = DateUtil.getJavaDate(cell.getNumericCellValue()); | result = DateUtil.getJavaDate(cell.getNumericCellValue()); | ||||
| @@ -96,7 +93,13 @@ public class CellValueService { | |||||
| return null; | return null; | ||||
| } | } | ||||
| } | } | ||||
| if (("class java.sql.Date").equals(classFullName)) { | |||||
| if (("class java.time.Instant").equals(classFullName)) { | |||||
| result = ((Date) result).toInstant(); | |||||
| } else if (("class java.time.LocalDate").equals(classFullName)) { | |||||
| result = ((Date) result).toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); | |||||
| } else if (("class java.time.LocalDateTime").equals(classFullName)) { | |||||
| result = ((Date) result).toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime(); | |||||
| } else if (("class java.sql.Date").equals(classFullName)) { | |||||
| result = new java.sql.Date(((Date) result).getTime()); | result = new java.sql.Date(((Date) result).getTime()); | ||||
| } else if (("class java.sql.Time").equals(classFullName)) { | } else if (("class java.sql.Time").equals(classFullName)) { | ||||
| result = new Time(((Date) result).getTime()); | result = new Time(((Date) result).getTime()); | ||||
| @@ -197,43 +200,10 @@ public class CellValueService { | |||||
| * @param titleString | * @param titleString | ||||
| * @param dictHandler | * @param dictHandler | ||||
| */ | */ | ||||
| public Object getValue(IExcelDataHandler<?> dataHandler, Object object, String cell, | |||||
| public Object getValue(IExcelDataHandler<?> dataHandler, Object object, Object cell, | |||||
| Map<String, ExcelImportEntity> excelParams, | Map<String, ExcelImportEntity> excelParams, | ||||
| String titleString, IExcelDictHandler dictHandler) throws Exception { | String titleString, IExcelDictHandler dictHandler) throws Exception { | ||||
| ExcelImportEntity entity = excelParams.get(titleString); | |||||
| String classFullName = "class java.lang.Object"; | |||||
| Class clazz = null; | |||||
| if (!(object instanceof Map)) { | |||||
| Method setMethod = entity.getMethods() != null && entity.getMethods().size() > 0 | |||||
| ? entity.getMethods().get(entity.getMethods().size() - 1) : entity.getMethod(); | |||||
| Type[] ts = setMethod.getGenericParameterTypes(); | |||||
| classFullName = ts[0].toString(); | |||||
| clazz = (Class) ts[0]; | |||||
| } | |||||
| Object result = cell; | |||||
| if (entity != null) { | |||||
| result = handlerSuffix(entity.getSuffix(), result); | |||||
| result = replaceValue(entity.getReplace(), result); | |||||
| if (dictHandler != null && StringUtils.isNoneBlank(entity.getDict())) { | |||||
| result = dictHandler.toValue(entity.getDict(), object, entity.getName(), result); | |||||
| } | |||||
| } | |||||
| result = handlerValue(dataHandler, object, result, titleString); | |||||
| return getValueByType(classFullName, result, entity, clazz); | |||||
| } | |||||
| /** | |||||
| * 获取cell的值 | |||||
| * | |||||
| * @param object | |||||
| * @param cell | |||||
| * @param excelParams | |||||
| * @param titleString | |||||
| * @param dictHandler | |||||
| */ | |||||
| public Object getValue(IExcelDataHandler<?> dataHandler, Object object, Cell cell, | |||||
| Map<String, ExcelImportEntity> excelParams, | |||||
| String titleString, IExcelDictHandler dictHandler) throws Exception { | |||||
| ExcelImportEntity entity = excelParams.get(titleString); | ExcelImportEntity entity = excelParams.get(titleString); | ||||
| String classFullName = "class java.lang.Object"; | String classFullName = "class java.lang.Object"; | ||||
| Class clazz = null; | Class clazz = null; | ||||
| @@ -244,13 +214,18 @@ public class CellValueService { | |||||
| classFullName = ts[0].toString(); | classFullName = ts[0].toString(); | ||||
| clazz = (Class) ts[0]; | clazz = (Class) ts[0]; | ||||
| } | } | ||||
| Object result = getCellValue(classFullName, cell, entity); | |||||
| Object result = null; | |||||
| if(cell instanceof Cell){ | |||||
| result = getCellValue(classFullName, (Cell) cell, entity); | |||||
| }else{ | |||||
| result = cell; | |||||
| } | |||||
| if (entity != null) { | if (entity != null) { | ||||
| result = handlerSuffix(entity.getSuffix(), result); | result = handlerSuffix(entity.getSuffix(), result); | ||||
| result = replaceValue(entity.getReplace(), result); | result = replaceValue(entity.getReplace(), result); | ||||
| result = replaceValue(entity.getReplace(), result); | result = replaceValue(entity.getReplace(), result); | ||||
| if (dictHandler != null && StringUtils.isNoneBlank(entity.getDict())) { | if (dictHandler != null && StringUtils.isNoneBlank(entity.getDict())) { | ||||
| dictHandler.toValue(entity.getDict(), object, entity.getName(), result); | |||||
| result = dictHandler.toValue(entity.getDict(), object, entity.getName(), result); | |||||
| } | } | ||||
| } | } | ||||
| result = handlerValue(dataHandler, object, result, titleString); | result = handlerValue(dataHandler, object, result, titleString); | ||||
| @@ -19,6 +19,7 @@ import cn.afterturn.easypoi.excel.entity.params.ExcelCollectionParams; | |||||
| import cn.afterturn.easypoi.excel.entity.params.ExcelImportEntity; | import cn.afterturn.easypoi.excel.entity.params.ExcelImportEntity; | ||||
| import cn.afterturn.easypoi.excel.entity.result.ExcelImportResult; | import cn.afterturn.easypoi.excel.entity.result.ExcelImportResult; | ||||
| import cn.afterturn.easypoi.excel.entity.result.ExcelVerifyHandlerResult; | import cn.afterturn.easypoi.excel.entity.result.ExcelVerifyHandlerResult; | ||||
| import cn.afterturn.easypoi.excel.entity.vo.BaseEntityTypeConstants; | |||||
| import cn.afterturn.easypoi.excel.imports.base.ImportBaseService; | import cn.afterturn.easypoi.excel.imports.base.ImportBaseService; | ||||
| import cn.afterturn.easypoi.excel.imports.recursive.ExcelImportForkJoinWork; | import cn.afterturn.easypoi.excel.imports.recursive.ExcelImportForkJoinWork; | ||||
| import cn.afterturn.easypoi.exception.excel.ExcelImportException; | import cn.afterturn.easypoi.exception.excel.ExcelImportException; | ||||
| @@ -66,11 +67,12 @@ public class ExcelImportService extends ImportBaseService { | |||||
| private List<Row> successRow; | private List<Row> successRow; | ||||
| private List<Row> failRow; | private List<Row> failRow; | ||||
| private List failCollection = new ArrayList(); | |||||
| private List failCollection; | |||||
| public ExcelImportService() { | public ExcelImportService() { | ||||
| successRow = new ArrayList<Row>(); | successRow = new ArrayList<Row>(); | ||||
| failRow = new ArrayList<Row>(); | failRow = new ArrayList<Row>(); | ||||
| failCollection = new ArrayList(); | |||||
| this.cellValueServer = new CellValueService(); | this.cellValueServer = new CellValueService(); | ||||
| } | } | ||||
| @@ -102,9 +104,9 @@ public class ExcelImportService extends ImportBaseService { | |||||
| Cell cell = row.getCell(i); | Cell cell = row.getCell(i); | ||||
| String titleString = (String) titlemap.get(i); | String titleString = (String) titlemap.get(i); | ||||
| if (param.getExcelParams().containsKey(titleString)) { | if (param.getExcelParams().containsKey(titleString)) { | ||||
| if (param.getExcelParams().get(titleString).getType() == 2) { | |||||
| if (param.getExcelParams().get(titleString).getType() == BaseEntityTypeConstants.IMAGE_TYPE) { | |||||
| picId = row.getRowNum() + "_" + i; | picId = row.getRowNum() + "_" + i; | ||||
| saveImage(object, picId, param.getExcelParams(), titleString, pictures, params); | |||||
| saveImage(entity, picId, param.getExcelParams(), titleString, pictures, params); | |||||
| } else { | } else { | ||||
| try { | try { | ||||
| saveFieldValue(params, entity, cell, param.getExcelParams(), titleString, row); | saveFieldValue(params, entity, cell, param.getExcelParams(), titleString, row); | ||||
| @@ -158,7 +160,8 @@ public class ExcelImportService extends ImportBaseService { | |||||
| List<ExcelCollectionParams> excelCollection = new ArrayList<ExcelCollectionParams>(); | List<ExcelCollectionParams> excelCollection = new ArrayList<ExcelCollectionParams>(); | ||||
| String targetId = null; | String targetId = null; | ||||
| i18nHandler = params.getI18nHandler(); | i18nHandler = params.getI18nHandler(); | ||||
| if (!Map.class.equals(pojoClass)) { | |||||
| boolean isMap = Map.class.equals(pojoClass); | |||||
| if (!isMap) { | |||||
| Field[] fileds = PoiPublicUtil.getClassFields(pojoClass); | Field[] fileds = PoiPublicUtil.getClassFields(pojoClass); | ||||
| ExcelTarget etarget = pojoClass.getAnnotation(ExcelTarget.class); | ExcelTarget etarget = pojoClass.getAnnotation(ExcelTarget.class); | ||||
| if (etarget != null) { | if (etarget != null) { | ||||
| @@ -207,6 +210,13 @@ public class ExcelImportService extends ImportBaseService { | |||||
| if (sheet.getLastRowNum() - row.getRowNum() < params.getLastOfInvalidRow()) { | if (sheet.getLastRowNum() - row.getRowNum() < params.getLastOfInvalidRow()) { | ||||
| break; | break; | ||||
| } | } | ||||
| /* 如果当前行的单元格都是无效的,那就继续下一行 */ | |||||
| if (row.getLastCellNum()<0) { | |||||
| continue; | |||||
| } | |||||
| if(isMap) { | |||||
| ((Map) object).put("excelRowNum", row.getRowNum()); | |||||
| } | |||||
| errorMsg = new StringBuilder(); | errorMsg = new StringBuilder(); | ||||
| // 判断是集合元素还是不是集合元素,如果是就继续加入这个集合,不是就创建新的对象 | // 判断是集合元素还是不是集合元素,如果是就继续加入这个集合,不是就创建新的对象 | ||||
| // keyIndex 如果为空就不处理,仍然处理这一行 | // keyIndex 如果为空就不处理,仍然处理这一行 | ||||
| @@ -224,9 +234,9 @@ public class ExcelImportService extends ImportBaseService { | |||||
| for (Integer cn : keys) { | for (Integer cn : keys) { | ||||
| Cell cell = row.getCell(cn); | Cell cell = row.getCell(cn); | ||||
| String titleString = (String) titlemap.get(cn); | String titleString = (String) titlemap.get(cn); | ||||
| if (excelParams.containsKey(titleString) || Map.class.equals(pojoClass)) { | |||||
| if (excelParams.containsKey(titleString) || isMap) { | |||||
| if (excelParams.get(titleString) != null | if (excelParams.get(titleString) != null | ||||
| && excelParams.get(titleString).getType() == 2) { | |||||
| && excelParams.get(titleString).getType() == BaseEntityTypeConstants.IMAGE_TYPE) { | |||||
| picId = row.getRowNum() + "_" + cn; | picId = row.getRowNum() + "_" + cn; | ||||
| saveImage(object, picId, excelParams, titleString, pictures, | saveImage(object, picId, excelParams, titleString, pictures, | ||||
| params); | params); | ||||
| @@ -251,7 +261,7 @@ public class ExcelImportService extends ImportBaseService { | |||||
| for (ExcelCollectionParams param : excelCollection) { | for (ExcelCollectionParams param : excelCollection) { | ||||
| addListContinue(object, param, row, titlemap, targetId, pictures, params, errorMsg); | addListContinue(object, param, row, titlemap, targetId, pictures, params, errorMsg); | ||||
| } | } | ||||
| if (verifyingDataValidity(object, row, params, pojoClass, errorMsg)) { | |||||
| if (verifyingDataValidity(object, row, params, isMap, errorMsg)) { | |||||
| collection.add(object); | collection.add(object); | ||||
| } else { | } else { | ||||
| failCollection.add(object); | failCollection.add(object); | ||||
| @@ -276,7 +286,7 @@ public class ExcelImportService extends ImportBaseService { | |||||
| * 校验数据合法性 | * 校验数据合法性 | ||||
| */ | */ | ||||
| public boolean verifyingDataValidity(Object object, Row row, ImportParams params, | public boolean verifyingDataValidity(Object object, Row row, ImportParams params, | ||||
| Class<?> pojoClass, StringBuilder fieldErrorMsg) { | |||||
| boolean isMap, StringBuilder fieldErrorMsg) { | |||||
| boolean isAdd = true; | boolean isAdd = true; | ||||
| Cell cell = null; | Cell cell = null; | ||||
| if (params.isNeedVerify()) { | if (params.isNeedVerify()) { | ||||
| @@ -326,6 +336,9 @@ public class ExcelImportService extends ImportBaseService { | |||||
| if (cell != null) { | if (cell != null) { | ||||
| cell.setCellStyle(errorCellStyle); | cell.setCellStyle(errorCellStyle); | ||||
| failRow.add(row); | failRow.add(row); | ||||
| if(isMap) { | |||||
| ((Map) object).put("excelErrorMsg", cell.getStringCellValue()); | |||||
| } | |||||
| } else { | } else { | ||||
| successRow.add(row); | successRow.add(row); | ||||
| } | } | ||||
| @@ -242,6 +242,7 @@ public final class PoiPublicUtil { | |||||
| || "java.lang".equals(fieldType.getPackage().getName()) | || "java.lang".equals(fieldType.getPackage().getName()) | ||||
| || "java.math".equals(fieldType.getPackage().getName()) | || "java.math".equals(fieldType.getPackage().getName()) | ||||
| || "java.sql".equals(fieldType.getPackage().getName()) | || "java.sql".equals(fieldType.getPackage().getName()) | ||||
| || "java.time".equals(fieldType.getPackage().getName()) | |||||
| || "java.util".equals(fieldType.getPackage().getName())) { | || "java.util".equals(fieldType.getPackage().getName())) { | ||||
| isBaseClass = true; | isBaseClass = true; | ||||
| } | } | ||||
| @@ -51,7 +51,7 @@ | |||||
| <guava.version>16.0.1</guava.version> | <guava.version>16.0.1</guava.version> | ||||
| <commons-lang.version>3.2.1</commons-lang.version> | <commons-lang.version>3.2.1</commons-lang.version> | ||||
| <slf4j.version>1.6.1</slf4j.version> | <slf4j.version>1.6.1</slf4j.version> | ||||
| <spring.version>5.0.6.RELEASE</spring.version> | |||||
| <spring.version>5.1.7.RELEASE</spring.version> | |||||
| </properties> | </properties> | ||||
| <dependencyManagement> | <dependencyManagement> | ||||
| <dependencies> | <dependencies> | ||||