注解介绍

注解@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


注意事项

  1. @Excel 功能使用特殊注解
    局部使用变量:
    对于单个单元格的背景颜色(titleBackground)和宽度(height),均必须在最后一列,即排列号最大功能处进行使用
    如:sort=4为当前类表格排列最大的值
    @Excel(name = “部门负责人”, sort = 4, horizontalMergeNum = 3, titleBackground = “0,255,127”)
    @Excel(name = “部门负责人”, sort = 4, horizontalMergeNum = 3, height= 40)
  2. @Excel 不强制使用sort属性,sort虽有默认值,建议sort视为必须需要使用的且唯一的属性


注解使用案例

本案例基于L**ombokJunit测试, @Data**为Lambok注解, @Excel配置相应的属性即可进行实现相应效果

Model基本类

  1. package cn.zzhardy.utils.poi.test.example;
  2. import java.util.Date;
  3. import cn.zzhardy.annotation.Excel;
  4. import cn.zzhardy.annotation.Excel.ColumnType;
  5. import cn.zzhardy.annotation.Excel.FunctionType;
  6. import cn.zzhardy.annotation.Excels;
  7. import lombok.Data;
  8. /**
  9. * 日志信息
  10. * @author 朱志辉
  11. */
  12. @Data
  13. public class SysLog {
  14. @Excel(name = "日志序号", sort = 1, prompt="测试")
  15. private Long jobLogId;
  16. @Excel(name = "日志信息", sort = 2)
  17. private String jobMessage;
  18. @Excel(name = "执行状态", valueSubstitution = "0=正常,1=失败", sort = 4, fontColor = "0=#ff0000,1=#66ccff", combo = {"正常", "失败"})
  19. private int status;
  20. @Excel(name = "异常信息", sort = 3)
  21. private String exceptionInfo;
  22. /** 部门对象 */
  23. @Excels({
  24. @Excel(name = "部门名称", sort = 6, targetAttr = "deptName"),
  25. @Excel(name = "部门负责人", sort = 7, horizontalMergeNum = 3, targetAttr = "leader", titleBackground = "217,225,242")
  26. })
  27. private SysDept dept;
  28. @Excel(name = "创建日期", dateFormat = "yyyy-MM-dd", sort = 5)
  29. private Date createDate;
  30. @Excel(name = "失败报警图片", sort = 8, cellType = ColumnType.IMAGE, titleBackground = "217, 225, 242")
  31. private String errorImageUrl;
  32. }
  1. import lombok.Data;
  2. @Data
  3. public class SysDept {
  4. /** 部门名称 */
  5. private String deptName;
  6. /** 负责人 */
  7. private String leader;
  8. }

测试类

  1. /**
  2. * 单个@Excel全部范例
  3. */
  4. @Test
  5. public void createByExcel() {
  6. List<SysLog> list = new ArrayList<>();
  7. for (int i = 0; i < 10; i++) {
  8. SysLog sysLog = new SysLog();
  9. sysLog.setExceptionInfo("测试");
  10. sysLog.setJobLogId(1l);
  11. sysLog.setJobMessage("ce111");
  12. if (i % 2 == 0) {
  13. sysLog.setStatus(1);
  14. } else {
  15. sysLog.setStatus(0);
  16. }
  17. sysLog.setCreateDate(new Date());
  18. String imageUrl = UrlUtils.projectUrl() + "webapp/images/timg.jpg";
  19. sysLog.setErrorImageUrl(imageUrl);
  20. // 部门信息
  21. SysDept sysDept = new SysDept();
  22. sysDept.setDeptName("测试部门" + i);
  23. sysDept.setLeader("测试部门领导" + i);
  24. sysLog.setDept(sysDept);
  25. list.add(sysLog);
  26. }
  27. ExcelCenter<SysLog> util = new ExcelCenter<>(SysLog.class);
  28. AjaxResult form = util.exportExcel(list, "form");
  29. System.out.println(form.toString());
  30. }

生成效果

image.png