悟纤:师傅,看你最近没有动静。EasyPoi导出是不是说完了?
师傅:那到没有,那些用途还没说。
悟纤:还有什么?
大师:如数据脱敏、换行、枚举、模板文件导出等。
悟纤:学习知识还是那么多的。让我消化...
师傅:今天我们先来谈谈简单,放松一下。
悟纤:师傅,那就赶紧开始吧。
导读
前面介绍了很多关于导出的方法和技巧,本节就数据脱敏、换行、枚举等问题进行了数据处理。
一、换行
1.1用换行符号换行
首先可以指定换行符号\n进行换行,如下所示:
users.add(new UserExportVO(“悟纤”,1,new Date(),“18688888888”,“168888”@qq.com",bytes,"公众号\nSpringBoot"));
1.2模板文件中
使用easypoi模板导出表格时,可以使用easypoi提供的br函数实现单元格中的强制换行。
例如,在导出的Excel模板中使用${br(text)}代表text字符串中每个换行符的换行。
至于如何使用模板文件导出,将在下面的小节中进行介绍。本节不会先解释。
二、数据脱敏
数据脱敏有两种方法,一种是简单的,可以在注释或ExcelExportentity中设置属性,规则如下:
(1)规则1:采用保留头尾、中间数据和星号的方式
如果身份证6_4,保留370101********
手机号 3_4保留131****124
(2)规则2:采用确定隐藏字段的方式进行隐藏,首先保留头部
例如,姓名1、3表示最大隐藏3位,最小隐藏3位
李--> *
李三-->李*
张全蛋 -->张*蛋
李张全蛋-->李**蛋
尼古拉斯.李张全蛋->尼古拉***张全蛋
(3)规则3:保留特殊符号后
例如:邮箱1~@表示只保留第一个和@之后的字段
afterturn@wupaas.com -> a********@wupaas.com
请使用复杂版本的接口{@link cn.afterturn.easypoi.handler.inter.IExcelDataHandler}也就是说,系统不单独处理数据接口本身的脱敏规则。
常用的脱敏规则如下:注释使用简单:
@Excel(name = "姓名", desensitizationRule = "1,6") private String name; @Excel(name = “身份证”, desensitizationRule = "6_4") private String card; @Excel(name = “手机号”, desensitizationRule = "3_4") private String phone; @Excel(name = "邮箱", desensitizationRule = "3~@") private String email;
这样,您就可以修改以前的代码:
@Excel(name = "姓名",width = 15,desensitizationRule = "1,3")private String realName;//@Excel(name = "性别",replace = { "男_1", "女_2" }, suffix = "生")@Excel(name = "性别",replace = { “男孩_1”, "女生_2" }, addressList = true)//@Excel(name = "性别",dict = "sex",addressList = true)private Integer sex;@Excel(name = “出生日期”,format = "yyyy-MM-dd",width = 15)private Date birthday;@Excel(name = “手机号”,width = 20,desensitizationRule = "3_4")private String phone;@Excel(name = "邮箱",width = 20,desensitizationRule = "1~@")private String email;
导出结果如下:
三、枚举类型
实体对象属性是枚举支持的几种处理模式,如下三个总数、最基本的无值数据、有值和固定方法:
private Sex sex; //第一种 @Excel(name =“基本状态” ) private StatusEnum baseStatus; //第二种 @Excel(name ="状态" , enumExportField = "message", enumImportMethod = "getByMessage") private StatusEnum status;//第三种
相应的Sex枚举类:
public enum Sex { /** * 男 */ MAN, /** * 女 */ WOMAN}
Statusenumum对应:
public enum StatusEnum { Init(0, “初始化”), Ready(1, “正常”), ChangePassword(2, “需要修改密码”), Frozen(4, “冻结”), Disabled(64, "禁用"); private final Integer _code; private final String _message; StatusEnum(Integer code, String message) { _code = code; _message = message; } public Integer getValue() { return _code; } public String getMessage() { return _message; } public static StatusEnum getByMessage(String message){ StatusEnum[] arr = StatusEnum.values(); for (int i = 0; i < arr.length; i++) { if (arr[i]._message.equals(message)){ return arr[i]; } } return null; }}
第一个和第二个是输出原始值,MAN,枚举值,如Init
三是输出相应的方法值,Easypoi适应反射调用getByMessage获取方法值