alibaba/easyexcel
Voir sur GitHub对于一个动态字段数量的实体,即一个实体类中存在以 Map 动态的存储字段的情况,如何优雅的实现导出?
Open
#3 912 ouverte le 2 août 2024
help wanted
Métriques du dépôt
- Stars
- (33 728 stars)
- Métriques de merge PR
- (Aucune PR mergée en 30 j)
Description
比如对于实体类
public class scoreTable {
private String studentName;
private String score;
private Map<String, Long> subScore;
}
对于每次查询,subScore 的项不一定一样,但可以保证一次查询中每一个实体中的 Map 的 key 都是一样的 如查询某次数学成绩,我的显示:
| 姓名 | 分数 | 选择 | 填空 |
-------------------------
| 小明 | 90 | 40 | 50 |
再如查询某次英语成绩,我的显示:
| 姓名 | 分数 | 完形 | 阅读 | 作文 |
--------------------------------
| 小明 | 70 | 20 | 20 | 30 |
目前,对于 easyexcel 我并未找到这种通过 Map 实现动态列的表格的导出方式,因此我自定义了工具类,读取表头和每一行数据,然后用以下的方式导出:
List<List<String>> headers = (List<List<String>>) excelExportData.get("headers");
List<List<Object>> rows = (List<List<Object>>) excelExportData.get("rows");
EasyExcel.write(filePath)
.head(headers)
.sheet(sheetName)
.doWrite(rows);
现在的问题是,以上方式没法拿到 scoreTable.class 的信息,因此 转换器注解、格式化注解等注解就无法识别,我只能在 excelExportData.get("rows") 的方法中手动实现 转换器注解、格式化注解的生效,比较麻烦且不能复用 easyexcel 的注解解析能力。 如果以 EasyExcel.write(filePath, scoreTable.class) 的方式 拿到 scoreTable.class 的信息,就又会覆盖掉 head(headers) 设置的表头。
是否有更优雅的方式解决这个问题呢?