如何让App Script触发时将Firebase数据写入Google Sheet新行?
解决Firebase数据写入Google Sheet时无法追加到新行的问题
问题描述
我需要将Firebase中的数据提取到Google Sheet中,已实现两者的数据同步,但每次通过App Script触发函数时,数据总是覆盖原有行,无法写入新行。原代码如下:
function getAllData() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheets = ss.getSheets(); var sheet = ss.getActiveSheet(); var firebaseUrl = "firebase url"; var base = FirebaseApp.getDatabaseByUrl(firebaseUrl); var dataSet = [base.getData()]; var rows = [], data; for (i = 0; i < dataSet.length; i++) { data = dataSet[i]; var in_time = Utilities.formatDate(new Date(), "GMT+8", "HH:mm:ss"); var in_date = Utilities.formatDate(new Date(), "GMT+8", "yyyy-MM-dd"); rows.push([data.Tank1, data.RandomTank1, data.RandomMain, in_time, in_date]); } a=2; dataRange = sheet.getRange(a, 1, rows.length, 5); dataRange.setValues(rows); }
问题原因
原代码中固定了写入的起始行为第2行(a=2),每次触发函数都会从第2行开始覆盖原有数据,无法实现追加到新行的需求。
解决方法
修改代码,通过sheet.getLastRow()获取当前表格的最后一行,然后从最后一行的下一行开始写入数据:
function getAllData() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getActiveSheet(); var firebaseUrl = "firebase url"; var base = FirebaseApp.getDatabaseByUrl(firebaseUrl); var dataSet = [base.getData()]; var rows = [], data; for (i = 0; i < dataSet.length; i++) { data = dataSet[i]; var in_time = Utilities.formatDate(new Date(), "GMT+8", "HH:mm:ss"); var in_date = Utilities.formatDate(new Date(), "GMT+8", "yyyy-MM-dd"); rows.push([data.Tank1, data.RandomTank1, data.RandomMain, in_time, in_date]); } // 获取最后一行,从下一行开始写入 var lastRow = sheet.getLastRow(); var dataRange = sheet.getRange(lastRow + 1, 1, rows.length, 5); dataRange.setValues(rows); }
后续说明
该问题已成功解决,非常感谢@onit的帮助!
内容的提问来源于stack exchange,提问作者Zian Cale
相关产品推荐
相关产品推荐

