如何将Firebase数据按列而非行保存到Google Sheet?
解决方案
要实现数据按列展示,核心是调整数据数组的结构和写入范围的参数,具体修改如下:
修改后的完整代码
function getAllData() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getActiveSheet(); var firebaseUrl = "firebase url"; var base = FirebaseApp.getDatabaseByUrl(firebaseUrl); var data = base.getData(); // 直接获取单条数据,无需包裹成数组 var in_time = Utilities.formatDate(new Date(), "GMT+8", "HH:mm:ss"); var in_date = Utilities.formatDate(new Date(), "GMT+8", "yyyy-MM-dd"); // 构造列展示的数组:每个数据项单独作为一行(单列) var columns = [ [data.PUMP], [data.Tank1], [data.Tank2], [data.Tank3], [data.Valve1], [data.Valve2], [data.Valve3], [data.RandomMain], [data.RandomNumber1], [data.RandomNumber2], [data.RandomNumber3], [data.RandomNumber4], [in_date], [in_time] ]; // 写入范围:从第2行第1列开始,共14行(对应14个数据项)、1列 sheet.getRange(2, 1, columns.length, 1).setValues(columns); }
关键修改点
- 简化数据获取:原代码把
base.getData()包裹成数组,但实际每次获取的是单条数据,直接赋值给data即可,无需多余循环。 - 调整数组结构:将原来「一行多列」的数组格式,改成「多行单列」的二维数组,确保每个数据项单独占一行,实现垂直列展示。
- 修改写入范围参数:
getRange(起始行, 起始列, 行数, 列数),现在行数匹配数据项总数,列数设为1,对应单列写入逻辑。
如果后续需要批量同步多条Firebase数据(按列堆叠),可在循环中把每条数据的列数组依次追加到columns中,再调整写入范围的行数即可。
内容的提问来源于stack exchange,提问作者Zian Cale
相关产品推荐
相关产品推荐

