生成类似以下样式的表格附件
代码实现:
public static void tableWrite() {
String fileName = "C://u/test.xlsx";
// 方法1 这里直接写多个table的案例了,如果只有一个 也可以直一行代码搞定,参照其他案
// 这里 需要指定写用哪个class去写
ExcelWriter excelWriter = EasyExcel.write(fileName).build();
// 标题样式
WriteCellStyle headCellStyle = this.getHeadStyle();
// 这个策略是 头是头的样式 内容是内容的样式 其他的策略可以自己实现
HorizontalCellStyleStrategy strategy = new HorizontalCellStyleStrategy(headCellStyle, new WriteCellStyle());
// 把sheet设置为不需要头 不然会输出sheet的头 这样看起来第一个table 就有2个头了
WriteSheet writeSheet = EasyExcel.writerSheet(0)
//设置自定义样式
.registerWriteHandler(strategy).
//设置自适应列宽
registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())
.needHead(Boolean.FALSE).build();
for (int i = 0; i < 6; i++) {
// 这里必须指定需要头,table 会继承sheet的配置,sheet配置了不需要,table 默认也是不需要
WriteTable writeTable0 = EasyExcel.writerTable(i).needHead(Boolean.TRUE)
.head(head()).build();
// 第一次写入会创建头
excelWriter.write(dataList(), writeSheet, writeTable0);
}
excelWriter.finish();
}
private static List<List<String>> head() {
List<List<String>> list = CollUtil.newArrayList();
List<String> head0 = CollUtil.newArrayList();
head0.add("id");
List<String> head1 = CollUtil.newArrayList();
head1.add("姓名");
List<String> head2 = CollUtil.newArrayList();
head2.add("年龄");
list.add(head0);
list.add(head1);
list.add(head2);
return list;
}
//可以直接循环加入表头
private static List<List<String>> head2() {
List<List<String>> list = CollUtil.newArrayList();
String[] str = {"id", "名称","描述"};
for (int i = 0; i < str.length; i++) {
List<String> head = CollUtil.newArrayList();
head.add(str[i]);
list.add(head);
}
return list;
}
private static List<List<Object>> dataList() {
List<List<Object>> list = CollUtil.newArrayList();
for (int i = 0; i < 1; i++) {
List<Object> data = CollUtil.newArrayList();
data.add("字符串" + i);
data.add(0.56);
data.add(new Date());
list.add(data);
}
return list;
}
/**
* 表头样式配置(根据自己实际情况进行删减,调整)
*
* @return
*/
public static WriteCellStyle getHeadStyle() {
// 头的策略
WriteCellStyle headWriteCellStyle = new WriteCellStyle();
// 背景颜色
headWriteCellStyle.setFillForegroundColor(IndexedColors.WHITE.getIndex());
headWriteCellStyle.setFillPatternType(FillPatternType.NO_FILL);
// 字体
WriteFont headWriteFont = new WriteFont();
headWriteFont.setFontName("宋体");//设置字体名字
headWriteFont.setFontHeightInPoints((short) 14);//设置字体大小
headWriteFont.setBold(true);//字体加粗
headWriteCellStyle.setWriteFont(headWriteFont); //在样式用应用设置的字体;
// 样式
headWriteCellStyle.setBorderBottom(BorderStyle.THIN);//设置底边框;
headWriteCellStyle.setBottomBorderColor((short) 0);//设置底边框颜色;
headWriteCellStyle.setBorderLeft(BorderStyle.THIN); //设置左边框;
headWriteCellStyle.setLeftBorderColor((short) 0);//设置左边框颜色;
headWriteCellStyle.setBorderRight(BorderStyle.THIN);//设置右边框;
headWriteCellStyle.setRightBorderColor((short) 0);//设置右边框颜色;
headWriteCellStyle.setBorderTop(BorderStyle.THIN);//设置顶边框;
headWriteCellStyle.setTopBorderColor((short) 0); //设置顶边框颜色;
headWriteCellStyle.setWrapped(true); //设置自动换行;
headWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);//设置水平对齐的样式为居中对齐;
headWriteCellStyle.setVerticalAlignment(VerticalAlignment.CENTER); //设置垂直对齐的样式为居中对齐;
headWriteCellStyle.setShrinkToFit(true);//设置文本收缩至合适
return headWriteCellStyle;
}