如何用 EasyExcel 导出复杂表头
需求描述
用 EasyExcel (https://easyexcel.opensource.alibaba.com/)导出如下格式的 Excel:
!
实现方法
这种复杂表头需要使用 EasyExcel 的动态表头生成,实现代码如下:
package org.test;
import com.alibaba.excel.EasyExcel;
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
exportExcel();
}
public static void exportExcel() {
EasyExcel.write("d:\\students_info.xlsx")
// 这里放入动态头
.head(generateExcelHead())
.sheet()
// 这里传入数据
.doWrite(setExcelData());
}
private static List<List<String>> generateExcelHead() {
List<List<String>> result = new ArrayList<>();
List<String> head0 = new ArrayList<>();
head0.add("学号");
result.add(head0);
List<String> head1 = new ArrayList<>();
head1.add("姓名");
result.add(head1);
// 有相同父级表头的,先在List添加父级表头,再添加下一级表头
List<String> grade1Chinese = new ArrayList<>();
grade1Chinese.add("一年级");
grade1Chinese.add("语文");
result.add(grade1Chinese);
List<String> grade1Math = new ArrayList<>();
grade1Math.add("一年级");
grade1Math.add("数学");
result.add(grade1Math);
List<String> grade1English = new ArrayList<>();
grade1English.add("一年级");
grade1English.add("英语");
result.add(grade1English);
List<String> grade2Chinese = new ArrayList<>();
grade2Chinese.add("二年级");
grade2Chinese.add("语文");
result.add(grade2Chinese);
List<String> grade2Math = new ArrayList<>();
grade2Math.add("二年级");
grade2Math.add("数学");
result.add(grade2Math);
List<String> grade2English = new ArrayList<>();
grade2English.add("二年级");
grade2English.add("英语");
result.add(grade2English);
return result;
}
private static List<List<Object>> setExcelData() {
List<List<Object>> result = new ArrayList<>();
// 数据按每行从左到右写入
List<Object> row0 = new ArrayList<>();
row0.add(1);
row0.add("李雷");
row0.add(98);
row0.add(97);
row0.add(99);
row0.add(96);
row0.add(98);
row0.add(99);
result.add(row0);
List<Object> row1 = new ArrayList<>();
row1.add(2);
row1.add("韩梅梅");
row1.add(99);
row1.add(96);
row1.add(98);
row1.add(97);
row1.add(99);
row1.add(97);
result.add(row1);
return result;
}
}