Angular中使用SheetJS导出Excel时如何展示嵌套对象属性值
解决SheetJS生成XLSX时嵌套对象字段为空的问题
SheetJS的json_to_sheet方法默认仅支持解析扁平JSON对象,遇到category这种嵌套对象时,无法自动读取其内部的name属性,因此会导致对应列内容为空。可以通过以下两种方法解决:
方法一:预处理数据为扁平结构
遍历原始数据数组,将嵌套的category.name提取为独立的扁平字段,再传给json_to_sheet:
// 预处理模型数据,提取嵌套属性 const processedModels = filteredModels.map(model => ({ id: model.id, name: model.name, category: model.category.name // 直接映射嵌套属性值 })); // 生成工作簿和工作表 const workbook = XLSX.utils.book_new(); const worksheet = XLSX.utils.json_to_sheet(processedModels); XLSX.utils.book_append_sheet(workbook, worksheet, 'Ingredients'); XLSX.writeFile(workbook, 'Ingredients.xlsx', { compression: true });
方法二:手动构建二维数组(AOA)
如果需要更灵活的表头或数据控制,可以将数据转换为二维数组(Array of Arrays),再用aoa_to_sheet生成工作表:
// 定义表头 const headers = ['id', 'name', 'category']; // 转换模型为数据行 const dataRows = filteredModels.map(model => [ model.id, model.name, model.category.name ]); // 合并表头与数据行 const aoaData = [headers, ...dataRows]; // 生成工作簿和工作表 const workbook = XLSX.utils.book_new(); const worksheet = XLSX.utils.aoa_to_sheet(aoaData); XLSX.utils.book_append_sheet(workbook, worksheet, 'Ingredients'); XLSX.writeFile(workbook, 'Ingredients.xlsx', { compression: true });
两种方法都能让XLSX表格的category列正确显示对应分类名称,其中方法一更简洁,适合简单嵌套场景;方法二更灵活,适合复杂表头或多嵌套层级的情况。
内容的提问来源于stack exchange,提问作者Danny Jebb
相关产品推荐
相关产品推荐

