easyexcel表格导入 动态列列头写入一列,动态列数据写入另一列,既然是动态列,数组不包含具体名字
时间: 2023-06-15 13:05:07 浏览: 908
对于EasyExcel表格导入动态列,可以通过以下步骤实现动态列列头写入一列,动态列数据写入另一列:
1. 定义一个类来存储动态列数据,其中包含一个Map类型的属性,用于存储动态列数据,例如:
```
public class DynamicColumnData {
private Map<String, Object> dynamicDataMap;
// getter、setter方法省略
}
```
2. 在ExcelListener中重写invokeHeadMap方法,获取动态列的信息,并将动态列列头写入到对应的列中,例如:
```
@Override
public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {
// 获取动态列列头信息
List<String> dynamicColumnHeaders = new ArrayList<>();
for (Map.Entry<Integer, String> entry : headMap.entrySet()) {
String header = entry.getValue();
// 判断是否为动态列列头
if (header.startsWith("动态列")) {
dynamicColumnHeaders.add(header);
}
}
// 将动态列列头写入到对应的列中
int dynamicColumnIndex = 2; // 假设动态列在第3列
for (String header : dynamicColumnHeaders) {
writeCell(0, dynamicColumnIndex, header); // 写入动态列列头
dynamicColumnIndex++; // 下一列
}
}
```
3. 在ExcelListener中重写invoke方法,获取动态列数据,并将动态列数据写入到对应的列中,例如:
```
@Override
public void invoke(DynamicColumnData data, AnalysisContext context) {
// 获取动态列数据Map
Map<String, Object> dynamicDataMap = data.getDynamicDataMap();
// 写入静态列数据
writeCell(0, 0, data.getName());
writeCell(0, 1, data.getAge());
// 写入动态列数据
int dynamicColumnIndex = 2; // 假设动态列在第3列
for (Map.Entry<String, Object> entry : dynamicDataMap.entrySet()) {
Object value = entry.getValue();
writeCell(0, dynamicColumnIndex, value != null ? value.toString() : ""); // 写入动态列数据
dynamicColumnIndex++; // 下一列
}
}
```
通过以上步骤,就可以实现EasyExcel表格导入动态列,动态列列头写入一列,动态列数据写入另一列的功能。需要注意的是,动态列数据的顺序应该与动态列列头的顺序一致。
阅读全文