注解介绍
注解@Excel,组件操作Excel单元格的最小单元,其中@Excel可使用注解@Excels 所修饰的类,通过targetAttr的值去映射该类中的属性,其中值与映射类属性相同,可通过@Excel属性,进行修改表格的基本属性,如表格的宽、高、字体颜色、背景颜色、水平合并单元格、数据固定格式替换、日期格式、….
可通过excel属性创建复制的表格样式,具体显示什么样的表格,完全取决于每一个@Excel的属性的追加,成指数形式,属性越多,效果更好,但最终取决于你的美观
注解功能
相同格式的数据导出
@Excel属性详解
表格基本属性
属性名 |
描述 |
格式 |
值格式 |
name |
导出到Excel中的title名字 |
String |
“” |
sort |
导出时在excel中排序 |
Int |
0 |
cellType |
导出类型(0数字 1字符串) |
ColumnType |
|
height |
导出时在excel中每个列的高度 单位为字符 |
int |
|
width |
导出时在excel中每个列的宽 单位为字符 |
int |
|
defaultValue |
当值为空时,字段的默认值 |
String |
|
prompt |
提示信息 |
String |
表格输入信息提示 |
combo |
设置只能选择不能输入的列内容. |
String[] |
{“正常”, “失败”} |
targetAttr |
仅在@Excels中使用另一个类中的属性名称,支持多级获取,以小数点隔开 |
String |
|
align |
导出字段对齐方式(0:默认;1:靠左;2:居中;3:靠右) |
String |
表格功能属性
属性名 |
描述 |
格式 |
值格式 |
horizontalMergeNum |
水平合并单元格 |
Int |
0 |
titleBackground |
表格title的背景颜色 |
String |
“r,g,b” == “217,225,242” |
fontColor |
指定内容为字体颜色 |
String |
如: 警告=#ff0000,安全=#66ccff |
表格数据格式属性
属性名 |
描述 |
格式 |
值格式 |
dateFormat |
日期格式 |
String |
如: yyyy-MM-dd |
valueSubstitution |
值替换 (如: 0=男,1=女,2=未知) |
String |
自定义 |
separator |
分隔符,读取字符串组内容 |
String |
|
scale |
BigDecimal 精度 默认:-1(默认不开启BigDecimal格式化) |
String |
|
roundingMode |
BigDecimal 舍入规则 默认:BigDecimal.ROUND_HALF_EVEN |
String |
|
suffix |
文字后缀,如% 90 变成90% |
String |
注意事项
- @Excel 功能使用特殊注解
局部使用变量:
对于单个单元格的背景颜色(titleBackground)和宽度(height),均必须在最后一列,即排列号最大功能处进行使用
如:sort=4为当前类表格排列最大的值
@Excel(name = “部门负责人”, sort = 4, horizontalMergeNum = 3, titleBackground = “0,255,127”)
@Excel(name = “部门负责人”, sort = 4, horizontalMergeNum = 3, height= 40) - @Excel 不强制使用sort属性,sort虽有默认值,建议sort视为必须需要使用的且唯一的属性
注解使用案例
本案例基于L**ombok和Junit测试, @Data**为Lambok注解, @Excel配置相应的属性即可进行实现相应效果
Model基本类
package cn.zzhardy.utils.poi.test.example;
import java.util.Date;
import cn.zzhardy.annotation.Excel;
import cn.zzhardy.annotation.Excel.ColumnType;
import cn.zzhardy.annotation.Excel.FunctionType;
import cn.zzhardy.annotation.Excels;
import lombok.Data;
/**
* 日志信息
* @author 朱志辉
*/
@Data
public class SysLog {
@Excel(name = "日志序号", sort = 1, prompt="测试")
private Long jobLogId;
@Excel(name = "日志信息", sort = 2)
private String jobMessage;
@Excel(name = "执行状态", valueSubstitution = "0=正常,1=失败", sort = 4, fontColor = "0=#ff0000,1=#66ccff", combo = {"正常", "失败"})
private int status;
@Excel(name = "异常信息", sort = 3)
private String exceptionInfo;
/** 部门对象 */
@Excels({
@Excel(name = "部门名称", sort = 6, targetAttr = "deptName"),
@Excel(name = "部门负责人", sort = 7, horizontalMergeNum = 3, targetAttr = "leader", titleBackground = "217,225,242")
})
private SysDept dept;
@Excel(name = "创建日期", dateFormat = "yyyy-MM-dd", sort = 5)
private Date createDate;
@Excel(name = "失败报警图片", sort = 8, cellType = ColumnType.IMAGE, titleBackground = "217, 225, 242")
private String errorImageUrl;
}
import lombok.Data;
@Data
public class SysDept {
/** 部门名称 */
private String deptName;
/** 负责人 */
private String leader;
}
测试类
/**
* 单个@Excel全部范例
*/
@Test
public void createByExcel() {
List<SysLog> list = new ArrayList<>();
for (int i = 0; i < 10; i++) {
SysLog sysLog = new SysLog();
sysLog.setExceptionInfo("测试");
sysLog.setJobLogId(1l);
sysLog.setJobMessage("ce111");
if (i % 2 == 0) {
sysLog.setStatus(1);
} else {
sysLog.setStatus(0);
}
sysLog.setCreateDate(new Date());
String imageUrl = UrlUtils.projectUrl() + "webapp/images/timg.jpg";
sysLog.setErrorImageUrl(imageUrl);
// 部门信息
SysDept sysDept = new SysDept();
sysDept.setDeptName("测试部门" + i);
sysDept.setLeader("测试部门领导" + i);
sysLog.setDept(sysDept);
list.add(sysLog);
}
ExcelCenter<SysLog> util = new ExcelCenter<>(SysLog.class);
AjaxResult form = util.exportExcel(list, "form");
System.out.println(form.toString());
}
生成效果