在 Excel 中,多层级的动态表头(例如表头有三行)可以通过 EasyExcel 来实现。EasyExcel 支持多级表头的创建,通过 List<List<String>>
来定义每一行的表头内容。
下面是一个示例代码,展示如何生成一个具有三层表头的 Excel 文件:
1. 添加依赖
确保你已经添加了 EasyExcel 的依赖。如果你使用的是 Maven,可以在 pom.xml
文件中添加以下依赖:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.0.5</version>
</dependency>
2. 定义数据模型
假设我们有一个简单的数据模型 User
:
public class User {
private String name;
private Integer age;
private String email;
// Getters and Setters
}
3. 动态生成多层级的表头和数据
我们将使用一个方法来动态生成多层级的表头和数据:
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.alibaba.excel.write.metadata.style.WriteCellStyle;
import com.alibaba.excel.write.style.HorizontalCellStyleStrategy;
import org.apache.poi.ss.usermodel.*;
import java.util.ArrayList;
import java.util.List;
public class MultiLevelHeaderExcelExport {
public static void main(String[] args) {
// 动态生成多层级的表头
List<List<String>> head = new ArrayList<>();
List<String> headerRow1 = new ArrayList<>();
headerRow1.add("基本信息");
headerRow1.add("基本信息");
headerRow1.add("基本信息");
head.add(headerRow1);
List<String> headerRow2 = new ArrayList<>();
headerRow2.add("姓名");
headerRow2.add("年龄");
headerRow2.add("邮箱");
head.add(headerRow2);
List<String> headerRow3 = new ArrayList<>();
headerRow3.add("Name");
headerRow3.add("Age");
headerRow3.add("Email");
head.add(headerRow3);
// 动态生成数据
List<List<Object>> data = new ArrayList<>();
List<Object> row1 = new ArrayList<>();
row1.add("Alice");
row1.add(30);
row1.add("alice@example.com");
List<Object> row2 = new ArrayList<>();
row2.add("Bob");
row2.add(25);
row2.add("bob@example.com");
data.add(row1);
data.add(row2);
// 导出到 Excel 文件
String fileName = "multi_level_header_excel.xlsx";
EasyExcel.write(fileName).head(head).sheet("Sheet1").doWrite(data);
}
}
4. 运行程序
运行上述程序后,会在项目根目录下生成一个名为 multi_level_header_excel.xlsx
的 Excel 文件,其中包含多层级的表头和数据。
5. 自定义样式(可选)
如果需要自定义单元格样式,可以使用 WriteCellStyle
和 HorizontalCellStyleStrategy
。例如:
WriteCellStyle headWriteCellStyle = new WriteCellStyle();
headWriteCellStyle.setFillForegroundColor(IndexedColors.YELLOW.getIndex());
WriteCellStyle contentWriteCellStyle = new WriteCellStyle();
contentWriteCellStyle.setFillForegroundColor(IndexedColors.LIGHT_BLUE.getIndex());
HorizontalCellStyleStrategy horizontalCellStyleStrategy = new HorizontalCellStyleStrategy(headWriteCellStyle, contentWriteCellStyle);
EasyExcel.write(fileName)
.head(head)
.registerWriteHandler(horizontalCellStyleStrategy)
.sheet("Sheet1")
.doWrite(data);