如何使用 App-Script 迭代将数据输出到 Google 工作表

How to Iterate to output data to Google Sheets with App-Script

使用 Google 应用程序脚本,当我使用 Logger.log() 时,for 循环正确迭代并且我得到了每个值的结果。当我尝试将其输出到 google sheet 时,只有每个变量的最后一个值会针对 goals.length.

的数量一遍又一遍地输出

非常感谢任何帮助!

function listGoals() {
      var sheet = SpreadsheetApp.getActiveSheet();
      var filterList = Analytics.Management.Goals.list(accountId, webPropertyId, profileId)
      var goals = filterList.items;
        for (var i = 0, goal; goal = goals[i]; i++) {
            var accountId = goal.accountId;
            var propertyId = goal.webPropertyId;
            var goalNumber = goal.id;
            var goalName = goal.name;

            Logger.log('accountId: ' + accountId);
            Logger.log('profileId: ' + propertyId);
            Logger.log('goal number: ' + goalNumber);
            Logger.log('goal name: ' + goalName);
            //Logger.log prints for each result

            sheet.getRange(1,1,goals.length).setValue(goalNumber);
            sheet.getRange(1,2,goals.length).setValue(goalName);
            //this only prints out the last value of goalNumber and goalName to the sheet

        }
    }

它不仅会打印最后的结果,还会不断地用新结果覆盖旧结果。 goals.length 仅当您随后提供包含如下值的数组时才有用:

[[1, "Goal 1"], 
 [2, "Goal 2"]]

如果你想打印出goalNumbergoalName的列表,你需要每次都偏移要写入的单元格。 像

sheet.getRange(1+i,1).setValue(goalNumber);
sheet.getRange(1+i,2).setValue(goalName);

为了稍微加快这个过程,而不是为每个目标都调用两次,您可以将 id 名称对作为数组存储在一个数组中,并在循环完成执行后执行最后一个 setValues 调用。

function listGoals() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var filterList = Analytics.Management.Goals.list(accountId, webPropertyId, profileId)
  var goals = filterList.items;
  var goalsToWrite = [];

  for (var i = 0, goal; goal = goals[i]; i++) {
    goalsToWrite.push([goal.id, goal.name]);
  }

  sheet.getRange(1, 1, goals.length, 2).setValues(goalsToWrite);
}