exceljs使用模型二级属性作为列key时列显示空白如何解决
问题原因
ExcelJS 本身不支持直接用点分隔的多级嵌套属性路径作为列的key。配置key后,组件默认只会匹配行数据的一级属性,你写key: "survey_type.name"时,它会去找行数据里属性名完全等于survey_type.name的一级字段,找不到对应值自然就显示空白。
可行解决方案
根据你的使用场景二选一即可:
- 方案1:给嵌套列配置自定义取值函数
不需要改动原始数据源,直接在列配置里加get方法,手动读取嵌套属性值,是最省事的方案:
如果你后续需要修改这一列的单元格值、把修改同步回原始数据,再配套加个worksheet.columns = [ { header: "ID", key: "_id", width: 30 }, { header: "Survey Name", key: "name", width: 30 }, { header: "Status", key: "status", width: 15 }, { header: "Survey Type", key: "survey_type_name", width: 50, // 手动取嵌套属性,空值兜底为空字符串 get: (rowData) => rowData.survey_type?.name ?? '' } ]set方法就行,纯导出展示的话只写get就够用。 - 方案2:预处理数据源,把嵌套属性拍平
如果要配置的嵌套列比较多,一个个写getter太麻烦,可以在往工作表塞数据之前,先把所有数据的嵌套字段提出来转成一级属性,和你配置的key对应上:
这种方式不用改列配置,批量处理完直接走原来的逻辑就行。// 预处理原始数据 const excelData = originDataList.map(item => ({ ...item, 'survey_type.name': item.survey_type?.name ?? '' })) // 处理完再添加到工作表 worksheet.addRows(excelData)
内容的提问来源于stack exchange,提问作者Al Imran Hossain
相关产品推荐
相关产品推荐

