From 8dd3ca5bb6b48e73f748ff4770f223b63cc09548 Mon Sep 17 00:00:00 2001 From: soulCoke <296312250@qq.com> Date: 星期四, 23 七月 2020 15:54:03 +0800 Subject: [PATCH] excel 导入数字不需要格式化 ,导入允许列和属性个数不一致。 --- ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java | 62 +++++++++++++++++++++++++------ 1 files changed, 50 insertions(+), 12 deletions(-) diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java index f4947e0..9e9932f 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java @@ -8,7 +8,6 @@ import java.lang.reflect.Field; import java.lang.reflect.Method; import java.math.BigDecimal; -import java.text.DecimalFormat; import java.util.ArrayList; import java.util.Arrays; import java.util.Comparator; @@ -18,6 +17,7 @@ import java.util.Map; import java.util.UUID; import java.util.stream.Collectors; + import org.apache.poi.hssf.usermodel.HSSFDateUtil; import org.apache.poi.ss.usermodel.BorderStyle; import org.apache.poi.ss.usermodel.Cell; @@ -41,6 +41,7 @@ import org.apache.poi.xssf.usermodel.XSSFDataValidation; import org.slf4j.Logger; import org.slf4j.LoggerFactory; + import com.ruoyi.common.annotation.Excel; import com.ruoyi.common.annotation.Excel.ColumnType; import com.ruoyi.common.annotation.Excel.Type; @@ -50,6 +51,7 @@ import com.ruoyi.common.core.text.Convert; import com.ruoyi.common.exception.CustomException; import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.common.utils.DictUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.reflect.ReflectUtils; @@ -199,7 +201,9 @@ // 设置类的私有字段属性可访问. field.setAccessible(true); Integer column = cellMap.get(attr.name()); - fieldsMap.put(column, field); + if(column !=null ) { // 字段在excel 中没有,那么就不需要设置值 + fieldsMap.put(column, field); + } } } for (int i = 1; i < rows; i++) @@ -270,7 +274,11 @@ } else if (StringUtils.isNotEmpty(attr.readConverterExp())) { - val = reverseByExp(String.valueOf(val), attr.readConverterExp()); + val = reverseByExp(Convert.toStr(val), attr.readConverterExp()); + } + else if (StringUtils.isNotEmpty(attr.dictType())) + { + val = reverseDictByExp(attr.dictType(), Convert.toStr(val)); } ReflectUtils.invokeSetter(entity, propertyName, val); } @@ -529,13 +537,18 @@ Object value = getTargetValue(vo, field, attr); String dateFormat = attr.dateFormat(); String readConverterExp = attr.readConverterExp(); + String dictType = attr.dictType(); if (StringUtils.isNotEmpty(dateFormat) && StringUtils.isNotNull(value)) { cell.setCellValue(DateUtils.parseDateToStr(dateFormat, (Date) value)); } else if (StringUtils.isNotEmpty(readConverterExp) && StringUtils.isNotNull(value)) { - cell.setCellValue(convertByExp(String.valueOf(value), readConverterExp)); + cell.setCellValue(convertByExp(Convert.toStr(value), readConverterExp)); + } + else if (StringUtils.isNotEmpty(dictType)) + { + cell.setCellValue(convertDictByExp(dictType, Convert.toStr(value))); } else { @@ -664,6 +677,30 @@ throw e; } return propertyValue; + } + + /** + * 解析字典值 + * + * @param dictType 字典类型 + * @param dictValue 字典值 + * @return 字典标签 + */ + public static String convertDictByExp(String dictType, String dictValue) throws Exception + { + return DictUtils.getDictLabel(dictType, dictValue); + } + + /** + * 反向解析值字典值 + * + * @param dictType 字典类型 + * @param dictValue 字典标签 + * @return 字典值 + */ + public static String reverseDictByExp(String dictType, String dictLabel) throws Exception + { + return DictUtils.getDictValue(dictType, dictLabel); } /** @@ -841,14 +878,15 @@ } else { - if ((Double) val % 1 > 0) - { - val = new DecimalFormat("0.00").format(val); - } - else - { - val = new DecimalFormat("0").format(val); - } + /* if ((Double) val % 1 > 0) + { + val = new DecimalFormat("0.00").format(val); + } + else + { + val = new DecimalFormat("0").format(val); + }*/ + val = new BigDecimal(val.toString()); // 导入的数据保证原汁原味,不做处理 } } else if (cell.getCellTypeEnum() == CellType.STRING) -- Gitblit v1.9.2