注解介绍
注解@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 朱志辉 */@Datapublic 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;@Datapublic 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()); }
生成效果