|
@@ -26,26 +26,7 @@ import org.apache.poi.hssf.usermodel.HSSFShape;
|
|
|
import org.apache.poi.hssf.usermodel.HSSFSheet;
|
|
|
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
|
|
import org.apache.poi.ooxml.POIXMLDocumentPart;
|
|
|
-import org.apache.poi.ss.usermodel.BorderStyle;
|
|
|
-import org.apache.poi.ss.usermodel.Cell;
|
|
|
-import org.apache.poi.ss.usermodel.CellStyle;
|
|
|
-import org.apache.poi.ss.usermodel.CellType;
|
|
|
-import org.apache.poi.ss.usermodel.ClientAnchor;
|
|
|
-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.Drawing;
|
|
|
-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.IndexedColors;
|
|
|
-import org.apache.poi.ss.usermodel.PictureData;
|
|
|
-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.usermodel.*;
|
|
|
import org.apache.poi.ss.util.CellRangeAddressList;
|
|
|
import org.apache.poi.util.IOUtils;
|
|
|
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
|
|
@@ -77,7 +58,7 @@ import com.fs.common.utils.reflect.ReflectUtils;
|
|
|
|
|
|
/**
|
|
|
* Excel相关处理
|
|
|
- *
|
|
|
+ *
|
|
|
|
|
|
*/
|
|
|
public class ExcelUtil<T>
|
|
@@ -164,7 +145,7 @@ public class ExcelUtil<T>
|
|
|
|
|
|
/**
|
|
|
* 对excel表单默认第一个索引名转换成list
|
|
|
- *
|
|
|
+ *
|
|
|
* @param is 输入流
|
|
|
* @return 转换后集合
|
|
|
*/
|
|
@@ -175,7 +156,7 @@ public class ExcelUtil<T>
|
|
|
|
|
|
/**
|
|
|
* 对excel表单指定表格索引名转换成list
|
|
|
- *
|
|
|
+ *
|
|
|
* @param sheetName 表格索引名
|
|
|
* @param is 输入流
|
|
|
* @return 转换后集合
|
|
@@ -354,7 +335,7 @@ public class ExcelUtil<T>
|
|
|
|
|
|
/**
|
|
|
* 对list数据源将其里面的数据导入到excel表单
|
|
|
- *
|
|
|
+ *
|
|
|
* @param list 导出数据集合
|
|
|
* @param sheetName 工作表的名称
|
|
|
* @return 结果
|
|
@@ -367,7 +348,7 @@ public class ExcelUtil<T>
|
|
|
|
|
|
/**
|
|
|
* 对list数据源将其里面的数据导入到excel表单
|
|
|
- *
|
|
|
+ *
|
|
|
* @param response 返回数据
|
|
|
* @param list 导出数据集合
|
|
|
* @param sheetName 工作表的名称
|
|
@@ -384,7 +365,7 @@ public class ExcelUtil<T>
|
|
|
|
|
|
/**
|
|
|
* 对list数据源将其里面的数据导入到excel表单
|
|
|
- *
|
|
|
+ *
|
|
|
* @param sheetName 工作表的名称
|
|
|
* @return 结果
|
|
|
*/
|
|
@@ -396,7 +377,7 @@ public class ExcelUtil<T>
|
|
|
|
|
|
/**
|
|
|
* 对list数据源将其里面的数据导入到excel表单
|
|
|
- *
|
|
|
+ *
|
|
|
* @param sheetName 工作表的名称
|
|
|
* @return 结果
|
|
|
*/
|
|
@@ -410,7 +391,7 @@ public class ExcelUtil<T>
|
|
|
|
|
|
/**
|
|
|
* 对list数据源将其里面的数据导入到excel表单
|
|
|
- *
|
|
|
+ *
|
|
|
* @return 结果
|
|
|
*/
|
|
|
public void exportExcel(OutputStream out)
|
|
@@ -433,7 +414,7 @@ public class ExcelUtil<T>
|
|
|
|
|
|
/**
|
|
|
* 对list数据源将其里面的数据导入到excel表单
|
|
|
- *
|
|
|
+ *
|
|
|
* @return 结果
|
|
|
*/
|
|
|
public AjaxResult exportExcel()
|
|
@@ -489,7 +470,7 @@ public class ExcelUtil<T>
|
|
|
|
|
|
/**
|
|
|
* 填充excel数据
|
|
|
- *
|
|
|
+ *
|
|
|
* @param index 序号
|
|
|
* @param row 单元格行
|
|
|
*/
|
|
@@ -516,7 +497,7 @@ public class ExcelUtil<T>
|
|
|
|
|
|
/**
|
|
|
* 创建表格样式
|
|
|
- *
|
|
|
+ *
|
|
|
* @param wb 工作薄对象
|
|
|
* @return 样式列表
|
|
|
*/
|
|
@@ -591,14 +572,54 @@ public class ExcelUtil<T>
|
|
|
Cell cell = row.createCell(column);
|
|
|
// 写入列信息
|
|
|
cell.setCellValue(attr.name());
|
|
|
+// setDataValidation(attr, row, column);
|
|
|
+// cell.setCellStyle(styles.get("header"));
|
|
|
+ // 获取默认样式
|
|
|
+ CellStyle cellStyle = styles.get("header");
|
|
|
+ // 如果是必填项,应用红色字体样式
|
|
|
+ if (attr.required()) {
|
|
|
+// CellStyle requiredStyle = row.getSheet().getWorkbook().createCellStyle();
|
|
|
+// requiredStyle.cloneStyleFrom(cellStyle); // 复制原样式
|
|
|
+// Font font = row.getSheet().getWorkbook().createFont();
|
|
|
+// font.setColor(IndexedColors.RED.getIndex()); // 设置字体红色
|
|
|
+// requiredStyle.setFont(font);
|
|
|
+// cellStyle = requiredStyle;
|
|
|
+
|
|
|
+ // 添加 Excel 注释,提示用户该字段必填
|
|
|
+ addCellComment(cell, row.getSheet(), "必填项");
|
|
|
+ }
|
|
|
+ // 应用单元格样式
|
|
|
+ cell.setCellStyle(cellStyle);
|
|
|
+ // 设置数据校验规则(如果有)
|
|
|
setDataValidation(attr, row, column);
|
|
|
- cell.setCellStyle(styles.get("header"));
|
|
|
return cell;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 给 Excel 单元格添加注释
|
|
|
+ */
|
|
|
+ private void addCellComment(Cell cell, Sheet sheet, String commentText) {
|
|
|
+ if (cell.getCellComment() != null) {
|
|
|
+ return; // 如果已存在注释,直接返回,避免重复添加
|
|
|
+ }
|
|
|
+ Drawing<?> drawing = sheet.createDrawingPatriarch();
|
|
|
+ CreationHelper factory = sheet.getWorkbook().getCreationHelper();
|
|
|
+
|
|
|
+ // 创建注释框
|
|
|
+ ClientAnchor anchor = factory.createClientAnchor();
|
|
|
+ // 确保 anchor 对象配置正确
|
|
|
+ anchor.setCol1(cell.getColumnIndex()); // 设置注释的列
|
|
|
+ anchor.setRow1(cell.getRowIndex()); // 设置注释的行
|
|
|
+ Comment comment = drawing.createCellComment(anchor);
|
|
|
+ comment.setString(factory.createRichTextString(commentText));
|
|
|
+
|
|
|
+ // 绑定注释到单元格
|
|
|
+ cell.setCellComment(comment);
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 设置单元格信息
|
|
|
- *
|
|
|
+ *
|
|
|
* @param value 单元格值
|
|
|
* @param attr 注解相关
|
|
|
* @param cell 单元格信息
|
|
@@ -743,7 +764,7 @@ public class ExcelUtil<T>
|
|
|
|
|
|
/**
|
|
|
* 设置 POI XSSFSheet 单元格提示
|
|
|
- *
|
|
|
+ *
|
|
|
* @param sheet 表单
|
|
|
* @param promptTitle 提示标题
|
|
|
* @param promptContent 提示内容
|
|
@@ -766,7 +787,7 @@ public class ExcelUtil<T>
|
|
|
|
|
|
/**
|
|
|
* 设置某些列的值只能输入预制的数据,显示下拉框.
|
|
|
- *
|
|
|
+ *
|
|
|
* @param sheet 要设置的sheet.
|
|
|
* @param textlist 下拉框显示的内容
|
|
|
* @param firstRow 开始行
|
|
@@ -800,7 +821,7 @@ public class ExcelUtil<T>
|
|
|
|
|
|
/**
|
|
|
* 解析导出值 0=男,1=女,2=未知
|
|
|
- *
|
|
|
+ *
|
|
|
* @param propertyValue 参数值
|
|
|
* @param converterExp 翻译注解
|
|
|
* @param separator 分隔符
|
|
@@ -837,7 +858,7 @@ public class ExcelUtil<T>
|
|
|
|
|
|
/**
|
|
|
* 反向解析值 男=0,女=1,未知=2
|
|
|
- *
|
|
|
+ *
|
|
|
* @param propertyValue 参数值
|
|
|
* @param converterExp 翻译注解
|
|
|
* @param separator 分隔符
|
|
@@ -874,7 +895,7 @@ public class ExcelUtil<T>
|
|
|
|
|
|
/**
|
|
|
* 解析字典值
|
|
|
- *
|
|
|
+ *
|
|
|
* @param dictValue 字典值
|
|
|
* @param dictType 字典类型
|
|
|
* @param separator 分隔符
|
|
@@ -887,7 +908,7 @@ public class ExcelUtil<T>
|
|
|
|
|
|
/**
|
|
|
* 反向解析值字典值
|
|
|
- *
|
|
|
+ *
|
|
|
* @param dictLabel 字典标签
|
|
|
* @param dictType 字典类型
|
|
|
* @param separator 分隔符
|
|
@@ -955,7 +976,7 @@ public class ExcelUtil<T>
|
|
|
|
|
|
/**
|
|
|
* 获取下载路径
|
|
|
- *
|
|
|
+ *
|
|
|
* @param filename 文件名称
|
|
|
*/
|
|
|
public String getAbsoluteFile(String filename)
|
|
@@ -971,7 +992,7 @@ public class ExcelUtil<T>
|
|
|
|
|
|
/**
|
|
|
* 获取bean中的属性值
|
|
|
- *
|
|
|
+ *
|
|
|
* @param vo 实体对象
|
|
|
* @param field 字段
|
|
|
* @param excel 注解
|
|
@@ -1002,7 +1023,7 @@ public class ExcelUtil<T>
|
|
|
|
|
|
/**
|
|
|
* 以类的属性的get方法方法形式获取值
|
|
|
- *
|
|
|
+ *
|
|
|
* @param o
|
|
|
* @param name
|
|
|
* @return value
|
|
@@ -1087,7 +1108,7 @@ public class ExcelUtil<T>
|
|
|
|
|
|
/**
|
|
|
* 创建工作表
|
|
|
- *
|
|
|
+ *
|
|
|
* @param sheetNo sheet数量
|
|
|
* @param index 序号
|
|
|
*/
|
|
@@ -1108,7 +1129,7 @@ public class ExcelUtil<T>
|
|
|
|
|
|
/**
|
|
|
* 获取单元格值
|
|
|
- *
|
|
|
+ *
|
|
|
* @param row 获取的行
|
|
|
* @param column 获取单元格列号
|
|
|
* @return 单元格值
|
|
@@ -1168,7 +1189,7 @@ public class ExcelUtil<T>
|
|
|
|
|
|
/**
|
|
|
* 判断是否是空行
|
|
|
- *
|
|
|
+ *
|
|
|
* @param row 判断的行
|
|
|
* @return
|
|
|
*/
|