EasyExcel 动态导出 Excel 表头:根据数据列是否存在动态生成
使用 EasyExcel 导出 Excel 可以通过以下步骤实现根据表头对应是否有数据动态导出表头:
- 定义实体类作为 Excel 表头,如下所示:
@Data
public class ExcelHeader {
@ExcelProperty('姓名')
private String name;
@ExcelProperty('年龄')
private Integer age;
@ExcelProperty('性别')
private String gender;
@ExcelProperty('地址')
private String address;
}
- 定义数据类作为 Excel 数据,如下所示:
@Data
public class ExcelData {
private String name;
private Integer age;
private String gender;
private String address;
}
- 使用 EasyExcel 进行导出 Excel,根据表头对应是否有数据动态导出表头,如下所示:
public void exportExcel(List<ExcelData> dataList) {
// 创建 ExcelWriter
ExcelWriter excelWriter = new ExcelWriter(response.getOutputStream(), ExcelTypeEnum.XLSX, true);
// 写入表头
List<ExcelHeader> headerList = new ArrayList<>();
headerList.add(new ExcelHeader('姓名'));
headerList.add(new ExcelHeader('年龄'));
headerList.add(new ExcelHeader('性别'));
headerList.add(new ExcelHeader('地址'));
int headerSize = headerList.size();
int[] hasData = new int[headerSize]; // 记录每列是否有数据
WriteSheet writeSheet = EasyExcel.writerSheet().build();
excelWriter.write(headerList, writeSheet);
// 写入数据
for (ExcelData data : dataList) {
List<Object> rowData = new ArrayList<>();
for (int i = 0; i < headerSize; i++) {
String fieldName = headerList.get(i).getName();
try {
Object value = PropertyUtils.getProperty(data, fieldName);
rowData.add(value);
hasData[i] = 1; // 该列有数据
} catch (Exception e) {
e.printStackTrace();
}
}
excelWriter.write(rowData, writeSheet);
}
// 动态导出表头
List<ExcelHeader> newHeaderList = new ArrayList<>();
for (int i = 0; i < headerSize; i++) {
if (hasData[i] == 1) { // 该列有数据
newHeaderList.add(headerList.get(i));
}
}
if (newHeaderList.size() < headerSize) { // 如果有列没有数据,则重新写入表头
excelWriter.write(newHeaderList, writeSheet);
}
// 关闭 ExcelWriter
excelWriter.finish();
}
通过以上步骤,即可根据表头对应是否有数据动态导出表头。在写入数据时,记录每列是否有数据,然后在导出表头时根据记录的信息动态生成表头。如果有列没有数据,则重新写入表头。
原文地址: https://www.cveoy.top/t/topic/nlPk 著作权归作者所有。请勿转载和采集!