You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 14:18:09