|
|
@@ -9,6 +9,8 @@ import java.lang.reflect.Field;
|
|
|
import java.lang.reflect.Method;
|
|
|
import java.lang.reflect.ParameterizedType;
|
|
|
import java.math.BigDecimal;
|
|
|
+import java.net.URLEncoder;
|
|
|
+import java.nio.charset.StandardCharsets;
|
|
|
import java.text.DecimalFormat;
|
|
|
import java.time.LocalDate;
|
|
|
import java.time.LocalDateTime;
|
|
|
@@ -23,7 +25,10 @@ import java.util.Map;
|
|
|
import java.util.Set;
|
|
|
import java.util.UUID;
|
|
|
import java.util.stream.Collectors;
|
|
|
+import javax.servlet.ServletOutputStream;
|
|
|
import javax.servlet.http.HttpServletResponse;
|
|
|
+
|
|
|
+import com.ygtx.common.utils.spring.SpringUtils;
|
|
|
import org.apache.commons.lang3.ArrayUtils;
|
|
|
import org.apache.commons.lang3.RegExUtils;
|
|
|
import org.apache.commons.lang3.reflect.FieldUtils;
|
|
|
@@ -85,10 +90,12 @@ import com.ygtx.common.utils.file.FileTypeUtils;
|
|
|
import com.ygtx.common.utils.file.FileUtils;
|
|
|
import com.ygtx.common.utils.file.ImageUtils;
|
|
|
import com.ygtx.common.utils.reflect.ReflectUtils;
|
|
|
+import org.springframework.core.io.Resource;
|
|
|
+import org.springframework.core.io.ResourceLoader;
|
|
|
|
|
|
/**
|
|
|
* Excel相关处理
|
|
|
- *
|
|
|
+ *
|
|
|
* @author ruoyi
|
|
|
*/
|
|
|
public class ExcelUtil<T>
|
|
|
@@ -302,7 +309,7 @@ public class ExcelUtil<T>
|
|
|
|
|
|
/**
|
|
|
* 对excel表单默认第一个索引名转换成list
|
|
|
- *
|
|
|
+ *
|
|
|
* @param is 输入流
|
|
|
* @return 转换后集合
|
|
|
*/
|
|
|
@@ -313,7 +320,7 @@ public class ExcelUtil<T>
|
|
|
|
|
|
/**
|
|
|
* 对excel表单默认第一个索引名转换成list
|
|
|
- *
|
|
|
+ *
|
|
|
* @param is 输入流
|
|
|
* @param titleNum 标题占用行数
|
|
|
* @return 转换后集合
|
|
|
@@ -339,7 +346,7 @@ public class ExcelUtil<T>
|
|
|
|
|
|
/**
|
|
|
* 对excel表单指定表格索引名转换成list
|
|
|
- *
|
|
|
+ *
|
|
|
* @param sheetName 表格索引名
|
|
|
* @param titleNum 标题占用行数
|
|
|
* @param is 输入流
|
|
|
@@ -522,7 +529,7 @@ public class ExcelUtil<T>
|
|
|
|
|
|
/**
|
|
|
* 对list数据源将其里面的数据导入到excel表单
|
|
|
- *
|
|
|
+ *
|
|
|
* @param list 导出数据集合
|
|
|
* @param sheetName 工作表的名称
|
|
|
* @return 结果
|
|
|
@@ -534,7 +541,7 @@ public class ExcelUtil<T>
|
|
|
|
|
|
/**
|
|
|
* 对list数据源将其里面的数据导入到excel表单
|
|
|
- *
|
|
|
+ *
|
|
|
* @param list 导出数据集合
|
|
|
* @param sheetName 工作表的名称
|
|
|
* @param title 标题
|
|
|
@@ -548,7 +555,7 @@ public class ExcelUtil<T>
|
|
|
|
|
|
/**
|
|
|
* 对list数据源将其里面的数据导入到excel表单
|
|
|
- *
|
|
|
+ *
|
|
|
* @param response 返回数据
|
|
|
* @param list 导出数据集合
|
|
|
* @param sheetName 工作表的名称
|
|
|
@@ -561,7 +568,7 @@ public class ExcelUtil<T>
|
|
|
|
|
|
/**
|
|
|
* 对list数据源将其里面的数据导入到excel表单
|
|
|
- *
|
|
|
+ *
|
|
|
* @param response 返回数据
|
|
|
* @param list 导出数据集合
|
|
|
* @param sheetName 工作表的名称
|
|
|
@@ -578,7 +585,7 @@ public class ExcelUtil<T>
|
|
|
|
|
|
/**
|
|
|
* 对list数据源将其里面的数据导入到excel表单
|
|
|
- *
|
|
|
+ *
|
|
|
* @param sheetName 工作表的名称
|
|
|
* @return 结果
|
|
|
*/
|
|
|
@@ -589,7 +596,7 @@ public class ExcelUtil<T>
|
|
|
|
|
|
/**
|
|
|
* 对list数据源将其里面的数据导入到excel表单
|
|
|
- *
|
|
|
+ *
|
|
|
* @param sheetName 工作表的名称
|
|
|
* @param title 标题
|
|
|
* @return 结果
|
|
|
@@ -602,7 +609,7 @@ public class ExcelUtil<T>
|
|
|
|
|
|
/**
|
|
|
* 对list数据源将其里面的数据导入到excel表单
|
|
|
- *
|
|
|
+ *
|
|
|
* @param sheetName 工作表的名称
|
|
|
* @return 结果
|
|
|
*/
|
|
|
@@ -611,9 +618,30 @@ public class ExcelUtil<T>
|
|
|
importTemplateExcel(response, sheetName, StringUtils.EMPTY);
|
|
|
}
|
|
|
|
|
|
+ public void importTemplateFile(HttpServletResponse response, String fileName){
|
|
|
+ try {
|
|
|
+ String filename = URLEncoder.encode(fileName, StandardCharsets.UTF_8.toString());
|
|
|
+ Resource resource = SpringUtils.getApplicationContext().getResource("classpath:"+filename);
|
|
|
+ response.setContentType("application/x-download");
|
|
|
+ response.setHeader("Content-Disposition", "attachment;filename=" + filename);
|
|
|
+ try (ServletOutputStream out = response.getOutputStream();
|
|
|
+ InputStream stream = resource.getInputStream()) {
|
|
|
+ byte[] buff = new byte[1024];
|
|
|
+ int length;
|
|
|
+ // 从文件输入流读取数据,并写入响应输出流中,实现文件下载
|
|
|
+ while ((length = stream.read(buff)) > 0) {
|
|
|
+ out.write(buff, 0, length);
|
|
|
+ }
|
|
|
+ out.flush(); // 刷新输出流,确保所有数据都被发送到客户端
|
|
|
+ }
|
|
|
+ } catch (IOException e) {
|
|
|
+ e.printStackTrace(); // 输出异常信息,便于排查问题
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 对list数据源将其里面的数据导入到excel表单
|
|
|
- *
|
|
|
+ *
|
|
|
* @param sheetName 工作表的名称
|
|
|
* @param title 标题
|
|
|
* @return 结果
|
|
|
@@ -628,7 +656,7 @@ public class ExcelUtil<T>
|
|
|
|
|
|
/**
|
|
|
* 对list数据源将其里面的数据导入到excel表单
|
|
|
- *
|
|
|
+ *
|
|
|
* @return 结果
|
|
|
*/
|
|
|
public void exportExcel(HttpServletResponse response)
|
|
|
@@ -650,7 +678,7 @@ public class ExcelUtil<T>
|
|
|
|
|
|
/**
|
|
|
* 对list数据源将其里面的数据导入到excel表单
|
|
|
- *
|
|
|
+ *
|
|
|
* @return 结果
|
|
|
*/
|
|
|
public AjaxResult exportExcel()
|
|
|
@@ -718,7 +746,7 @@ public class ExcelUtil<T>
|
|
|
|
|
|
/**
|
|
|
* 填充excel数据
|
|
|
- *
|
|
|
+ *
|
|
|
* @param index 序号
|
|
|
* @param row 单元格行
|
|
|
*/
|
|
|
@@ -816,7 +844,7 @@ public class ExcelUtil<T>
|
|
|
|
|
|
/**
|
|
|
* 创建表格样式
|
|
|
- *
|
|
|
+ *
|
|
|
* @param wb 工作薄对象
|
|
|
* @return 样式列表
|
|
|
*/
|
|
|
@@ -872,7 +900,7 @@ public class ExcelUtil<T>
|
|
|
|
|
|
/**
|
|
|
* 根据Excel注解创建表格头样式
|
|
|
- *
|
|
|
+ *
|
|
|
* @param wb 工作薄对象
|
|
|
* @return 自定义样式列表
|
|
|
*/
|
|
|
@@ -908,7 +936,7 @@ public class ExcelUtil<T>
|
|
|
|
|
|
/**
|
|
|
* 根据Excel注解创建表格列样式
|
|
|
- *
|
|
|
+ *
|
|
|
* @param wb 工作薄对象
|
|
|
* @return 自定义样式列表
|
|
|
*/
|
|
|
@@ -940,7 +968,7 @@ public class ExcelUtil<T>
|
|
|
|
|
|
/**
|
|
|
* 根据Excel注解创建表格列样式
|
|
|
- *
|
|
|
+ *
|
|
|
* @param styles 自定义样式列表
|
|
|
* @param field 属性列信息
|
|
|
* @param excel 注解信息
|
|
|
@@ -1003,7 +1031,7 @@ public class ExcelUtil<T>
|
|
|
|
|
|
/**
|
|
|
* 设置单元格信息
|
|
|
- *
|
|
|
+ *
|
|
|
* @param value 单元格值
|
|
|
* @param attr 注解相关
|
|
|
* @param cell 单元格信息
|
|
|
@@ -1189,7 +1217,7 @@ public class ExcelUtil<T>
|
|
|
|
|
|
/**
|
|
|
* 设置 POI XSSFSheet 单元格提示或选择框
|
|
|
- *
|
|
|
+ *
|
|
|
* @param sheet 表单
|
|
|
* @param textlist 下拉框显示的内容
|
|
|
* @param promptContent 提示内容
|
|
|
@@ -1226,7 +1254,7 @@ public class ExcelUtil<T>
|
|
|
|
|
|
/**
|
|
|
* 设置某些列的值只能输入预制的数据,显示下拉框(兼容超出一定数量的下拉框).
|
|
|
- *
|
|
|
+ *
|
|
|
* @param sheet 要设置的sheet.
|
|
|
* @param textlist 下拉框显示的内容
|
|
|
* @param promptContent 提示内容
|
|
|
@@ -1278,7 +1306,7 @@ public class ExcelUtil<T>
|
|
|
|
|
|
/**
|
|
|
* 解析导出值 0=男,1=女,2=未知
|
|
|
- *
|
|
|
+ *
|
|
|
* @param propertyValue 参数值
|
|
|
* @param converterExp 翻译注解
|
|
|
* @param separator 分隔符
|
|
|
@@ -1315,7 +1343,7 @@ public class ExcelUtil<T>
|
|
|
|
|
|
/**
|
|
|
* 反向解析值 男=0,女=1,未知=2
|
|
|
- *
|
|
|
+ *
|
|
|
* @param propertyValue 参数值
|
|
|
* @param converterExp 翻译注解
|
|
|
* @param separator 分隔符
|
|
|
@@ -1352,7 +1380,7 @@ public class ExcelUtil<T>
|
|
|
|
|
|
/**
|
|
|
* 解析字典值
|
|
|
- *
|
|
|
+ *
|
|
|
* @param dictValue 字典值
|
|
|
* @param dictType 字典类型
|
|
|
* @param separator 分隔符
|
|
|
@@ -1365,7 +1393,7 @@ public class ExcelUtil<T>
|
|
|
|
|
|
/**
|
|
|
* 反向解析值字典值
|
|
|
- *
|
|
|
+ *
|
|
|
* @param dictLabel 字典标签
|
|
|
* @param dictType 字典类型
|
|
|
* @param separator 分隔符
|
|
|
@@ -1378,7 +1406,7 @@ public class ExcelUtil<T>
|
|
|
|
|
|
/**
|
|
|
* 数据处理器
|
|
|
- *
|
|
|
+ *
|
|
|
* @param value 数据值
|
|
|
* @param excel 数据注解
|
|
|
* @return
|
|
|
@@ -1454,7 +1482,7 @@ public class ExcelUtil<T>
|
|
|
|
|
|
/**
|
|
|
* 获取下载路径
|
|
|
- *
|
|
|
+ *
|
|
|
* @param filename 文件名称
|
|
|
*/
|
|
|
public String getAbsoluteFile(String filename)
|
|
|
@@ -1470,7 +1498,7 @@ public class ExcelUtil<T>
|
|
|
|
|
|
/**
|
|
|
* 获取bean中的属性值
|
|
|
- *
|
|
|
+ *
|
|
|
* @param vo 实体对象
|
|
|
* @param field 字段
|
|
|
* @param excel 注解
|
|
|
@@ -1502,7 +1530,7 @@ public class ExcelUtil<T>
|
|
|
|
|
|
/**
|
|
|
* 以类的属性的get方法方法形式获取值
|
|
|
- *
|
|
|
+ *
|
|
|
* @param o
|
|
|
* @param name
|
|
|
* @return value
|
|
|
@@ -1645,7 +1673,7 @@ public class ExcelUtil<T>
|
|
|
|
|
|
/**
|
|
|
* 创建工作表
|
|
|
- *
|
|
|
+ *
|
|
|
* @param sheetNo sheet数量
|
|
|
* @param index 序号
|
|
|
*/
|
|
|
@@ -1662,7 +1690,7 @@ public class ExcelUtil<T>
|
|
|
|
|
|
/**
|
|
|
* 获取单元格值
|
|
|
- *
|
|
|
+ *
|
|
|
* @param row 获取的行
|
|
|
* @param column 获取单元格列号
|
|
|
* @return 单元格值
|
|
|
@@ -1722,7 +1750,7 @@ public class ExcelUtil<T>
|
|
|
|
|
|
/**
|
|
|
* 判断是否是空行
|
|
|
- *
|
|
|
+ *
|
|
|
* @param row 判断的行
|
|
|
* @return
|
|
|
*/
|
|
|
@@ -1803,7 +1831,7 @@ public class ExcelUtil<T>
|
|
|
|
|
|
/**
|
|
|
* 格式化不同类型的日期对象
|
|
|
- *
|
|
|
+ *
|
|
|
* @param dateFormat 日期格式
|
|
|
* @param val 被格式化的日期对象
|
|
|
* @return 格式化后的日期字符
|
|
|
@@ -1869,7 +1897,7 @@ public class ExcelUtil<T>
|
|
|
|
|
|
/**
|
|
|
* 获取对象的子列表方法
|
|
|
- *
|
|
|
+ *
|
|
|
* @param name 名称
|
|
|
* @param pojoClass 类对象
|
|
|
* @return 子列表方法
|