Angular读取Google Sheets数据如何映射行列后存储到Firebase数据库
解决方案
你当前代码的核心问题是未将行数组与表头字段做映射,直接存储了索引为键的数组结构,按以下调整即可实现需求:
完整修改后代码
excelData(){ const sf = "https://docs.google.com/spreadsheets/d/1qeCEUlVt_hnuyhnoT1wxMMSv7kZW1s4cUIRLynJ0TxQ/gviz/tq"; this.http.get(sf,{responseType: 'text'}).subscribe(res=>{ const data = res.toString().match(/google\.visualization\.Query\.setResponse\(([\s\S\w]+)\)/); if(data && data.length == 2){ const obj = JSON.parse(data[1]); const table = obj.table; // 提取表头字段 const header = table.cols.map(({label}) => label); // 提取原始行数据 const rows = table.rows.map(({c}) => c.map(({v}) => v)); // 行列映射生成目标格式的用户数据 const formattedUserData = rows.map(row => { return row.reduce((userObj, value, index) => { // 把对应索引的表头作为字段名,行值作为字段值 userObj[header[index]] = value; return userObj; }, {}); }); console.log('格式化后的数据', formattedUserData); // 存储到Firebase,二选一即可 // 方案1:所有用户数据作为数组存在单个文档中 this.collection.doc('user_list').set({ users: formattedUserData }); // 方案2:每个用户单独存储为collection下的独立文档 // formattedUserData.forEach(user => { // this.collection.doc().set(user); // }); } }); }
调整说明
- 新增的
formattedUserData生成逻辑通过map+reduce组合完成行列映射,完全匹配你需要的UserData结构,不会再出现0、1、2这类数字字段名 - Firebase存储提供两种常用方案,可根据你的业务需求选择:如果需要统一管理整表数据选方案1,如果需要对单个用户数据做增删改查选方案2
内容的提问来源于stack exchange,提问作者Notation
相关产品推荐
相关产品推荐

