Java 使用EasyExcel写入文件动态表头
使用EasyExcel写入文件时,可以通过定义一个Java Bean类来实现动态表头,具体步骤如下:
- 定义Java Bean类,包含需要写入Excel的数据和表头信息,例如:
@Data
public class ExcelData {
// 表头信息,使用@ExcelProperty注解标识表头名称和顺序
@ExcelProperty(index = 0, value = "姓名")
private String name;
@ExcelProperty(index = 1, value = "年龄")
private Integer age;
// 数据信息
private List<Map<String, Object>> dataList;
}
- 使用EasyExcel的
ExcelWriterBuilder创建ExcelWriter对象,并指定输出的文件路径和Sheet名称。
ExcelWriterBuilder writerBuilder = EasyExcel.write(outputFilePath).sheet(sheetName);
ExcelWriter writer = writerBuilder.build();
- 使用
ExcelWriter的write方法写入表头信息和数据信息,表头信息从Java Bean类中获取,数据信息通过动态表头的方式传入。
// 写入表头信息
List<List<String>> headList = new ArrayList<>();
headList.add(excelData.getHeadList());
writer.writeHead(headList);
// 写入数据信息
List<Map<String, Object>> dataList = excelData.getDataList();
for (Map<String, Object> data : dataList) {
// 将Map转换为List
List<Object> rowData = new ArrayList<>();
for (String key : data.keySet()) {
rowData.add(data.get(key));
}
writer.writeRow(rowData);
}
完整的代码如下:
@Data
public class ExcelData {
// 表头信息,使用@ExcelProperty注解标识表头名称和顺序
@ExcelProperty(index = 0, value = "姓名")
private String name;
@ExcelProperty(index = 1, value = "年龄")
private Integer age;
// 数据信息
private List<Map<String, Object>> dataList;
// 动态获取表头信息
public List<String> getHeadList() {
List<String> headList = new ArrayList<>();
headList.add(name);
headList.add(age.toString());
for (String key : dataList.get(0).keySet()) {
headList.add(key);
}
return headList;
}
}
public void writeExcel(String outputFilePath, String sheetName, ExcelData excelData) {
ExcelWriterBuilder writerBuilder = EasyExcel.write(outputFilePath).sheet(sheetName);
ExcelWriter writer = writerBuilder.build();
// 写入表头信息
List<List<String>> headList = new ArrayList<>();
headList.add(excelData.getHeadList());
writer.writeHead(headList);
// 写入数据信息
List<Map<String, Object>> dataList = excelData.getDataList();
for (Map<String, Object> data : dataList) {
// 将Map转换为List
List<Object> rowData = new ArrayList<>();
for (String key : data.keySet()) {
rowData.add(data.get(key));
}
writer.writeRow(rowData);
}
writer.finish();
}
``
原文地址: http://www.cveoy.top/t/topic/dgCi 著作权归作者所有。请勿转载和采集!