@ -6,6 +6,8 @@ import java.lang.reflect.Field;
@@ -6,6 +6,8 @@ import java.lang.reflect.Field;
import java.lang.reflect.Method ;
import java.math.BigDecimal ;
import java.text.DecimalFormat ;
import java.time.LocalDate ;
import java.time.LocalDateTime ;
import java.util.ArrayList ;
import java.util.Arrays ;
import java.util.Comparator ;
@ -56,7 +58,7 @@ import com.ruoyi.common.core.utils.reflect.ReflectUtils;
@@ -56,7 +58,7 @@ import com.ruoyi.common.core.utils.reflect.ReflectUtils;
/ * *
* Excel相关处理
*
*
* @author ruoyi
* /
public class ExcelUtil < T >
@ -109,7 +111,7 @@ public class ExcelUtil<T>
@@ -109,7 +111,7 @@ public class ExcelUtil<T>
* 当前行号
* /
private int rownum ;
/ * *
* 标题
* /
@ -174,7 +176,7 @@ public class ExcelUtil<T>
@@ -174,7 +176,7 @@ public class ExcelUtil<T>
/ * *
* 对excel表单默认第一个索引名转换成list
*
*
* @param is 输入流
* @return 转换后集合
* /
@ -185,7 +187,7 @@ public class ExcelUtil<T>
@@ -185,7 +187,7 @@ public class ExcelUtil<T>
/ * *
* 对excel表单默认第一个索引名转换成list
*
*
* @param is 输入流
* @param titleNum 标题占用行数
* @return 转换后集合
@ -197,7 +199,7 @@ public class ExcelUtil<T>
@@ -197,7 +199,7 @@ public class ExcelUtil<T>
/ * *
* 对excel表单指定表格索引名转换成list
*
*
* @param sheetName 表格索引名
* @param titleNum 标题占用行数
* @param is 输入流
@ -282,7 +284,7 @@ public class ExcelUtil<T>
@@ -282,7 +284,7 @@ public class ExcelUtil<T>
String dateFormat = field . getAnnotation ( Excel . class ) . dateFormat ( ) ;
if ( StringUtils . isNotEmpty ( dateFormat ) )
{
val = DateUtil s. parseDateToStr ( dateFormat , ( Date ) val ) ;
val = thi s. parseDateToStr ( dateFormat , ( Date ) val ) ;
}
else
{
@ -351,7 +353,7 @@ public class ExcelUtil<T>
@@ -351,7 +353,7 @@ public class ExcelUtil<T>
/ * *
* 对list数据源将其里面的数据导入到excel表单
*
*
* @param response 返回数据
* @param list 导出数据集合
* @param sheetName 工作表的名称
@ -365,7 +367,7 @@ public class ExcelUtil<T>
@@ -365,7 +367,7 @@ public class ExcelUtil<T>
/ * *
* 对list数据源将其里面的数据导入到excel表单
*
*
* @param response 返回数据
* @param list 导出数据集合
* @param sheetName 工作表的名称
@ -383,13 +385,13 @@ public class ExcelUtil<T>
@@ -383,13 +385,13 @@ public class ExcelUtil<T>
/ * *
* 对list数据源将其里面的数据导入到excel表单
*
*
* @param sheetName 工作表的名称
* @return 结果
* /
/ * *
* 对list数据源将其里面的数据导入到excel表单
*
*
* @param sheetName 工作表的名称
* @return 结果
* /
@ -400,7 +402,7 @@ public class ExcelUtil<T>
@@ -400,7 +402,7 @@ public class ExcelUtil<T>
/ * *
* 对list数据源将其里面的数据导入到excel表单
*
*
* @param sheetName 工作表的名称
* @param title 标题
* @return 结果
@ -415,7 +417,7 @@ public class ExcelUtil<T>
@@ -415,7 +417,7 @@ public class ExcelUtil<T>
/ * *
* 对list数据源将其里面的数据导入到excel表单
*
*
* @return 结果
* /
public void exportExcel ( HttpServletResponse response )
@ -465,7 +467,7 @@ public class ExcelUtil<T>
@@ -465,7 +467,7 @@ public class ExcelUtil<T>
/ * *
* 填充excel数据
*
*
* @param index 序号
* @param row 单元格行
* /
@ -490,7 +492,7 @@ public class ExcelUtil<T>
@@ -490,7 +492,7 @@ public class ExcelUtil<T>
/ * *
* 创建表格样式
*
*
* @param wb 工作薄对象
* @return 样式列表
* /
@ -582,7 +584,7 @@ public class ExcelUtil<T>
@@ -582,7 +584,7 @@ public class ExcelUtil<T>
/ * *
* 设置单元格信息
*
*
* @param value 单元格值
* @param attr 注解相关
* @param cell 单元格信息
@ -701,7 +703,7 @@ public class ExcelUtil<T>
@@ -701,7 +703,7 @@ public class ExcelUtil<T>
String separator = attr . separator ( ) ;
if ( StringUtils . isNotEmpty ( dateFormat ) & & StringUtils . isNotNull ( value ) )
{
cell . setCellValue ( DateUtil s. parseDateToStr ( dateFormat , ( Date ) value ) ) ;
cell . setCellValue ( thi s. parseDateToStr ( dateFormat , ( Date ) value ) ) ;
}
else if ( StringUtils . isNotEmpty ( readConverterExp ) & & StringUtils . isNotNull ( value ) )
{
@ -732,7 +734,7 @@ public class ExcelUtil<T>
@@ -732,7 +734,7 @@ public class ExcelUtil<T>
/ * *
* 设置 POI XSSFSheet 单元格提示
*
*
* @param sheet 表单
* @param promptTitle 提示标题
* @param promptContent 提示内容
@ -755,7 +757,7 @@ public class ExcelUtil<T>
@@ -755,7 +757,7 @@ public class ExcelUtil<T>
/ * *
* 设置某些列的值只能输入预制的数据 , 显示下拉框 .
*
*
* @param sheet 要设置的sheet .
* @param textlist 下拉框显示的内容
* @param firstRow 开始行
@ -789,7 +791,7 @@ public class ExcelUtil<T>
@@ -789,7 +791,7 @@ public class ExcelUtil<T>
/ * *
* 解析导出值 0 = 男 , 1 = 女 , 2 = 未知
*
*
* @param propertyValue 参数值
* @param converterExp 翻译注解
* @param separator 分隔符
@ -826,7 +828,7 @@ public class ExcelUtil<T>
@@ -826,7 +828,7 @@ public class ExcelUtil<T>
/ * *
* 反向解析值 男 = 0 , 女 = 1 , 未知 = 2
*
*
* @param propertyValue 参数值
* @param converterExp 翻译注解
* @param separator 分隔符
@ -863,7 +865,7 @@ public class ExcelUtil<T>
@@ -863,7 +865,7 @@ public class ExcelUtil<T>
/ * *
* 数据处理器
*
*
* @param value 数据值
* @param excel 数据注解
* @return
@ -931,7 +933,7 @@ public class ExcelUtil<T>
@@ -931,7 +933,7 @@ public class ExcelUtil<T>
/ * *
* 获取bean中的属性值
*
*
* @param vo 实体对象
* @param field 字段
* @param excel 注解
@ -962,7 +964,7 @@ public class ExcelUtil<T>
@@ -962,7 +964,7 @@ public class ExcelUtil<T>
/ * *
* 以类的属性的get方法方法形式获取值
*
*
* @param o
* @param name
* @return value
@ -1057,7 +1059,7 @@ public class ExcelUtil<T>
@@ -1057,7 +1059,7 @@ public class ExcelUtil<T>
/ * *
* 创建工作表
*
*
* @param sheetNo sheet数量
* @param index 序号
* /
@ -1074,7 +1076,7 @@ public class ExcelUtil<T>
@@ -1074,7 +1076,7 @@ public class ExcelUtil<T>
/ * *
* 获取单元格值
*
*
* @param row 获取的行
* @param column 获取单元格列号
* @return 单元格值
@ -1134,7 +1136,7 @@ public class ExcelUtil<T>
@@ -1134,7 +1136,7 @@ public class ExcelUtil<T>
/ * *
* 判断是否是空行
*
*
* @param row 判断的行
* @return
* /
@ -1154,4 +1156,29 @@ public class ExcelUtil<T>
@@ -1154,4 +1156,29 @@ public class ExcelUtil<T>
}
return true ;
}
}
/ * *
* 增加ExcelUtil对java8 日期的支持
* 格式化日期 , 日期可能是 : { @link Date } 、 { @link LocalDateTime } 、 { @link LocalDate } 其他日期暂不支持
* @param dateFormat 日期格式
* @param val 被格式化的日期对象
* @see DateUtils # parseDateToStr ( String , Date )
* /
private String parseDateToStr ( final String dateFormat , Object val )
{
if ( val = = null ) {
return "" ;
}
String str ;
if ( val instanceof Date ) {
str = DateUtils . parseDateToStr ( dateFormat , ( Date ) val ) ;
} else if ( val instanceof LocalDateTime ) {
str = DateUtils . parseDateToStr ( dateFormat , DateUtils . toDate ( ( LocalDateTime ) val ) ) ;
} else if ( val instanceof LocalDate ) {
str = DateUtils . parseDateToStr ( dateFormat , DateUtils . toDate ( ( LocalDate ) val ) ) ;
} else {
str = val . toString ( ) ;
}
return str ;
}
}