在学习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);
}
下面看看具体的源码:
@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);
}
}
}