|
|
@ -1,59 +1,36 @@
|
|
|
|
package com.ruoyi.common.utils.poi;
|
|
|
|
package com.ruoyi.common.utils.poi;
|
|
|
|
|
|
|
|
|
|
|
|
import java.io.File;
|
|
|
|
import com.ruoyi.common.annotation.Excel;
|
|
|
|
import java.io.FileOutputStream;
|
|
|
|
import com.ruoyi.common.annotation.Excel.Type;
|
|
|
|
import java.io.IOException;
|
|
|
|
import com.ruoyi.common.base.AjaxResult;
|
|
|
|
import java.io.InputStream;
|
|
|
|
import com.ruoyi.common.config.Global;
|
|
|
|
import java.io.OutputStream;
|
|
|
|
import com.ruoyi.common.exception.BusinessException;
|
|
|
|
import java.lang.reflect.Field;
|
|
|
|
import com.ruoyi.common.reflect.ReflectUtils;
|
|
|
|
import java.lang.reflect.Method;
|
|
|
|
import com.ruoyi.common.support.Convert;
|
|
|
|
import java.math.BigDecimal;
|
|
|
|
import com.ruoyi.common.utils.DateUtils;
|
|
|
|
import java.text.DecimalFormat;
|
|
|
|
import com.ruoyi.common.utils.StringUtils;
|
|
|
|
import java.util.ArrayList;
|
|
|
|
|
|
|
|
import java.util.Arrays;
|
|
|
|
|
|
|
|
import java.util.Date;
|
|
|
|
|
|
|
|
import java.util.HashMap;
|
|
|
|
|
|
|
|
import java.util.List;
|
|
|
|
|
|
|
|
import java.util.Map;
|
|
|
|
|
|
|
|
import java.util.UUID;
|
|
|
|
|
|
|
|
import org.apache.poi.hssf.usermodel.DVConstraint;
|
|
|
|
import org.apache.poi.hssf.usermodel.DVConstraint;
|
|
|
|
import org.apache.poi.hssf.usermodel.HSSFDataValidation;
|
|
|
|
import org.apache.poi.hssf.usermodel.HSSFDataValidation;
|
|
|
|
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
|
|
|
|
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
|
|
|
|
import org.apache.poi.hssf.usermodel.HSSFFont;
|
|
|
|
import org.apache.poi.hssf.usermodel.HSSFFont;
|
|
|
|
import org.apache.poi.hssf.util.HSSFColor.HSSFColorPredefined;
|
|
|
|
import org.apache.poi.hssf.util.HSSFColor.HSSFColorPredefined;
|
|
|
|
import org.apache.poi.ss.usermodel.Cell;
|
|
|
|
import org.apache.poi.ss.usermodel.*;
|
|
|
|
import org.apache.poi.ss.usermodel.CellStyle;
|
|
|
|
|
|
|
|
import org.apache.poi.ss.usermodel.CellType;
|
|
|
|
|
|
|
|
import org.apache.poi.ss.usermodel.DataValidation;
|
|
|
|
|
|
|
|
import org.apache.poi.ss.usermodel.DataValidationConstraint;
|
|
|
|
|
|
|
|
import org.apache.poi.ss.usermodel.DataValidationHelper;
|
|
|
|
|
|
|
|
import org.apache.poi.ss.usermodel.DateUtil;
|
|
|
|
|
|
|
|
import org.apache.poi.ss.usermodel.FillPatternType;
|
|
|
|
|
|
|
|
import org.apache.poi.ss.usermodel.Font;
|
|
|
|
|
|
|
|
import org.apache.poi.ss.usermodel.HorizontalAlignment;
|
|
|
|
|
|
|
|
import org.apache.poi.ss.usermodel.Row;
|
|
|
|
|
|
|
|
import org.apache.poi.ss.usermodel.Sheet;
|
|
|
|
|
|
|
|
import org.apache.poi.ss.usermodel.VerticalAlignment;
|
|
|
|
|
|
|
|
import org.apache.poi.ss.usermodel.Workbook;
|
|
|
|
|
|
|
|
import org.apache.poi.ss.usermodel.WorkbookFactory;
|
|
|
|
|
|
|
|
import org.apache.poi.ss.util.CellRangeAddressList;
|
|
|
|
import org.apache.poi.ss.util.CellRangeAddressList;
|
|
|
|
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
|
|
|
|
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
|
|
|
|
import org.apache.poi.xssf.usermodel.XSSFDataValidation;
|
|
|
|
import org.apache.poi.xssf.usermodel.XSSFDataValidation;
|
|
|
|
import org.slf4j.Logger;
|
|
|
|
import org.slf4j.Logger;
|
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
import com.ruoyi.common.annotation.Excel;
|
|
|
|
|
|
|
|
import com.ruoyi.common.annotation.Excel.Type;
|
|
|
|
import java.io.*;
|
|
|
|
import com.ruoyi.common.base.AjaxResult;
|
|
|
|
import java.lang.reflect.Field;
|
|
|
|
import com.ruoyi.common.config.Global;
|
|
|
|
import java.lang.reflect.Method;
|
|
|
|
import com.ruoyi.common.exception.BusinessException;
|
|
|
|
import java.math.BigDecimal;
|
|
|
|
import com.ruoyi.common.reflect.ReflectUtils;
|
|
|
|
import java.text.DecimalFormat;
|
|
|
|
import com.ruoyi.common.support.Convert;
|
|
|
|
import java.util.*;
|
|
|
|
import com.ruoyi.common.utils.DateUtils;
|
|
|
|
|
|
|
|
import com.ruoyi.common.utils.StringUtils;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* Excel相关处理
|
|
|
|
* Excel相关处理
|
|
|
|
*
|
|
|
|
*
|
|
|
|
* @author ruoyi
|
|
|
|
* @author ruoyi
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
public class ExcelUtil<T>
|
|
|
|
public class ExcelUtil<T>
|
|
|
@ -120,7 +97,7 @@ public class ExcelUtil<T>
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* 对excel表单默认第一个索引名转换成list
|
|
|
|
* 对excel表单默认第一个索引名转换成list
|
|
|
|
*
|
|
|
|
*
|
|
|
|
* @param input 输入流
|
|
|
|
* @param input 输入流
|
|
|
|
* @return 转换后集合
|
|
|
|
* @return 转换后集合
|
|
|
|
*/
|
|
|
|
*/
|
|
|
@ -131,7 +108,7 @@ public class ExcelUtil<T>
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* 对excel表单指定表格索引名转换成list
|
|
|
|
* 对excel表单指定表格索引名转换成list
|
|
|
|
*
|
|
|
|
*
|
|
|
|
* @param sheetName 表格索引名
|
|
|
|
* @param sheetName 表格索引名
|
|
|
|
* @param input 输入流
|
|
|
|
* @param input 输入流
|
|
|
|
* @return 转换后集合
|
|
|
|
* @return 转换后集合
|
|
|
@ -261,7 +238,7 @@ public class ExcelUtil<T>
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* 对list数据源将其里面的数据导入到excel表单
|
|
|
|
* 对list数据源将其里面的数据导入到excel表单
|
|
|
|
*
|
|
|
|
*
|
|
|
|
* @param list 导出数据集合
|
|
|
|
* @param list 导出数据集合
|
|
|
|
* @param sheetName 工作表的名称
|
|
|
|
* @param sheetName 工作表的名称
|
|
|
|
* @return 结果
|
|
|
|
* @return 结果
|
|
|
@ -274,7 +251,7 @@ public class ExcelUtil<T>
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* 对list数据源将其里面的数据导入到excel表单
|
|
|
|
* 对list数据源将其里面的数据导入到excel表单
|
|
|
|
*
|
|
|
|
*
|
|
|
|
* @param sheetName 工作表的名称
|
|
|
|
* @param sheetName 工作表的名称
|
|
|
|
* @return 结果
|
|
|
|
* @return 结果
|
|
|
|
*/
|
|
|
|
*/
|
|
|
@ -286,7 +263,7 @@ public class ExcelUtil<T>
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* 对list数据源将其里面的数据导入到excel表单
|
|
|
|
* 对list数据源将其里面的数据导入到excel表单
|
|
|
|
*
|
|
|
|
*
|
|
|
|
* @return 结果
|
|
|
|
* @return 结果
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
public AjaxResult exportExcel()
|
|
|
|
public AjaxResult exportExcel()
|
|
|
@ -346,7 +323,7 @@ public class ExcelUtil<T>
|
|
|
|
if (StringUtils.isNotEmpty(attr.prompt()))
|
|
|
|
if (StringUtils.isNotEmpty(attr.prompt()))
|
|
|
|
{
|
|
|
|
{
|
|
|
|
// 这里默认设了2-101列提示.
|
|
|
|
// 这里默认设了2-101列提示.
|
|
|
|
setHSSFPrompt(sheet, "", attr.prompt(), 1, 100, i, i);
|
|
|
|
setXSSFPrompt(sheet, "", attr.prompt(), 1, 100, i, i);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
// 如果设置了combo属性则本列只能选择不能输入
|
|
|
|
// 如果设置了combo属性则本列只能选择不能输入
|
|
|
|
if (attr.combo().length > 0)
|
|
|
|
if (attr.combo().length > 0)
|
|
|
@ -399,7 +376,7 @@ public class ExcelUtil<T>
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* 填充excel数据
|
|
|
|
* 填充excel数据
|
|
|
|
*
|
|
|
|
*
|
|
|
|
* @param index 序号
|
|
|
|
* @param index 序号
|
|
|
|
* @param row 单元格行
|
|
|
|
* @param row 单元格行
|
|
|
|
* @param cell 类型单元格
|
|
|
|
* @param cell 类型单元格
|
|
|
@ -471,7 +448,7 @@ public class ExcelUtil<T>
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* 设置单元格上提示
|
|
|
|
* 设置单元格上提示
|
|
|
|
*
|
|
|
|
*
|
|
|
|
* @param sheet 要设置的sheet.
|
|
|
|
* @param sheet 要设置的sheet.
|
|
|
|
* @param promptTitle 标题
|
|
|
|
* @param promptTitle 标题
|
|
|
|
* @param promptContent 内容
|
|
|
|
* @param promptContent 内容
|
|
|
@ -495,9 +472,29 @@ public class ExcelUtil<T>
|
|
|
|
return sheet;
|
|
|
|
return sheet;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
* 设置 POI XSSFSheet 单元格提示
|
|
|
|
|
|
|
|
* @param sheet 表单
|
|
|
|
|
|
|
|
* @param promptTitle 提示标题
|
|
|
|
|
|
|
|
* @param promptContent 提示内容
|
|
|
|
|
|
|
|
* @param firstRow 开始行
|
|
|
|
|
|
|
|
* @param endRow 结束行
|
|
|
|
|
|
|
|
* @param firstCol 开始列
|
|
|
|
|
|
|
|
* @param endCol 结束列
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
public static void setXSSFPrompt(Sheet sheet, String promptTitle, String promptContent, int firstRow, int endRow, int firstCol, int endCol) {
|
|
|
|
|
|
|
|
DataValidationHelper dvHelper = sheet.getDataValidationHelper();
|
|
|
|
|
|
|
|
DataValidationConstraint constraint = dvHelper.createCustomConstraint("*");
|
|
|
|
|
|
|
|
CellRangeAddressList regions = new CellRangeAddressList(firstRow, endRow, firstCol, endCol);
|
|
|
|
|
|
|
|
DataValidation dataValidation = dvHelper.createValidation(constraint, regions);
|
|
|
|
|
|
|
|
dataValidation.createPromptBox(promptTitle, promptContent);
|
|
|
|
|
|
|
|
dataValidation.setShowPromptBox(true);
|
|
|
|
|
|
|
|
sheet.addValidationData(dataValidation);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* 设置某些列的值只能输入预制的数据,显示下拉框.
|
|
|
|
* 设置某些列的值只能输入预制的数据,显示下拉框.
|
|
|
|
*
|
|
|
|
*
|
|
|
|
* @param sheet 要设置的sheet.
|
|
|
|
* @param sheet 要设置的sheet.
|
|
|
|
* @param textlist 下拉框显示的内容
|
|
|
|
* @param textlist 下拉框显示的内容
|
|
|
|
* @param firstRow 开始行
|
|
|
|
* @param firstRow 开始行
|
|
|
@ -533,7 +530,7 @@ public class ExcelUtil<T>
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* 解析导出值 0=男,1=女,2=未知
|
|
|
|
* 解析导出值 0=男,1=女,2=未知
|
|
|
|
*
|
|
|
|
*
|
|
|
|
* @param propertyValue 参数值
|
|
|
|
* @param propertyValue 参数值
|
|
|
|
* @param converterExp 翻译注解
|
|
|
|
* @param converterExp 翻译注解
|
|
|
|
* @return 解析后值
|
|
|
|
* @return 解析后值
|
|
|
@ -562,7 +559,7 @@ public class ExcelUtil<T>
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* 反向解析值 男=0,女=1,未知=2
|
|
|
|
* 反向解析值 男=0,女=1,未知=2
|
|
|
|
*
|
|
|
|
*
|
|
|
|
* @param propertyValue 参数值
|
|
|
|
* @param propertyValue 参数值
|
|
|
|
* @param converterExp 翻译注解
|
|
|
|
* @param converterExp 翻译注解
|
|
|
|
* @return 解析后值
|
|
|
|
* @return 解析后值
|
|
|
@ -600,7 +597,7 @@ public class ExcelUtil<T>
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* 获取下载路径
|
|
|
|
* 获取下载路径
|
|
|
|
*
|
|
|
|
*
|
|
|
|
* @param filename 文件名称
|
|
|
|
* @param filename 文件名称
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
public String getAbsoluteFile(String filename)
|
|
|
|
public String getAbsoluteFile(String filename)
|
|
|
@ -616,7 +613,7 @@ public class ExcelUtil<T>
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* 获取bean中的属性值
|
|
|
|
* 获取bean中的属性值
|
|
|
|
*
|
|
|
|
*
|
|
|
|
* @param vo 实体对象
|
|
|
|
* @param vo 实体对象
|
|
|
|
* @param field 字段
|
|
|
|
* @param field 字段
|
|
|
|
* @param excel 注解
|
|
|
|
* @param excel 注解
|
|
|
@ -647,7 +644,7 @@ public class ExcelUtil<T>
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* 以类的属性的get方法方法形式获取值
|
|
|
|
* 以类的属性的get方法方法形式获取值
|
|
|
|
*
|
|
|
|
*
|
|
|
|
* @param o
|
|
|
|
* @param o
|
|
|
|
* @param name
|
|
|
|
* @param name
|
|
|
|
* @return value
|
|
|
|
* @return value
|
|
|
@ -708,7 +705,7 @@ public class ExcelUtil<T>
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* 创建工作表
|
|
|
|
* 创建工作表
|
|
|
|
*
|
|
|
|
*
|
|
|
|
* @param sheetName,指定Sheet名称
|
|
|
|
* @param sheetName,指定Sheet名称
|
|
|
|
* @param sheetNo sheet数量
|
|
|
|
* @param sheetNo sheet数量
|
|
|
|
* @param index 序号
|
|
|
|
* @param index 序号
|
|
|
@ -729,7 +726,7 @@ public class ExcelUtil<T>
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* 获取单元格值
|
|
|
|
* 获取单元格值
|
|
|
|
*
|
|
|
|
*
|
|
|
|
* @param row 获取的行
|
|
|
|
* @param row 获取的行
|
|
|
|
* @param column 获取单元格列号
|
|
|
|
* @param column 获取单元格列号
|
|
|
|
* @return 单元格值
|
|
|
|
* @return 单元格值
|
|
|
|