EasyExcel中处理表头行高和内容行高
2023-12-21 15:38:30
在学习easyExcek
时,发现使用easyExcek
处理表头和内容的行高十分容易只需要在类模型配置上使用@HeadRowHeight
或者@ContentRowHeight
注解实现控制。
- 创建一个类模型配置类
// 设置表头行高度
@HeadRowHeight(40)
// 设置内容行高度
@ContentRowHeight(60)
@Data
public class User {
private String name;
private String age;
private String address;
}
- 测试主类
public static void main(String[] args) {
List<User> userList = new ArrayList<>();
User user = new User();
user.setName("李四");
user.setAge("12");
user.setAddress("火星");
userList.add(user);
EasyExcel.write("F:\\excel\\a.xls", User.class)
.automaticMergeHead(false)
.sheet()
.doWrite(userList);
}
- 效果
总体感觉还是很easy的。
下面看看具体的源码:
- 注解
@HeadRowHeight
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
public @interface HeadRowHeight {
/**
* 设置表头高,默认是-1,-1 表示自动设置高度
*/
short value() default -1;
}
- 注解
@ContentRowHeight
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
public @interface ContentRowHeight {
/**
* 设置内容行高,默认是-1,-1 表示自动设置高度
*/
short value() default -1;
}
- 核心拦截器
public abstract class AbstractRowHeightStyleStrategy implements RowWriteHandler {
// 在完成该行的所有操作后调用。在填充的情况下,可以多次调用。
@Override
public void afterRowDispose(RowWriteHandlerContext context) {
if (context.getHead() == null) {
return;
}
// 当前是否是表头,是则调用setHeadColumnHeight
// 反之调用setContentColumnHeight
if (context.getHead()) {
setHeadColumnHeight(context.getRow(), context.getRelativeRowIndex());
} else {
setContentColumnHeight(context.getRow(), context.getRelativeRowIndex());
}
}
/**
* 设置表头行高抽象方法,需要子类进行实现
*
*/
protected abstract void setHeadColumnHeight(Row row, int relativeRowIndex);
/**
* 设置内容行高抽象方法,需要子类进行实现
*
*/
protected abstract void setContentColumnHeight(Row row, int relativeRowIndex);
}
- 唯一实现类
public class SimpleRowHeightStyleStrategy extends AbstractRowHeightStyleStrategy {
private final Short headRowHeight;
private final Short contentRowHeight;
public SimpleRowHeightStyleStrategy(Short headRowHeight, Short contentRowHeight) {
this.headRowHeight = headRowHeight;
this.contentRowHeight = contentRowHeight;
}
@Override
protected void setHeadColumnHeight(Row row, int relativeRowIndex) {
if (headRowHeight != null) {
row.setHeightInPoints(headRowHeight);
}
}
@Override
protected void setContentColumnHeight(Row row, int relativeRowIndex) {
if (contentRowHeight != null) {
row.setHeightInPoints(contentRowHeight);
}
}
}
文章来源:https://blog.csdn.net/qq_43072399/article/details/135126916
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!