【问题标题】:How to Iterate to output data to Google Sheets with App-Script如何使用 App-Script 迭代以将数据输出到 Google 表格
【发布时间】:2016-06-13 11:15:23
【问题描述】:

使用 Google App Script,当我使用 Logger.log() 时,for 循环会正确迭代,并且我会得到每个值的结果。当我尝试将其输出到谷歌表时,只有每个变量的最后一个值会一遍又一遍地输出目标数。

非常感谢任何帮助!

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

        }
    }

【问题讨论】:

    标签: google-apps-script google-sheets google-analytics-api


    【解决方案1】:

    它不仅打印最后的结果,它只是不断地用新的结果覆盖旧的结果。 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);
    } 
    

    【讨论】:

    • 非常感谢。这正是我想要的。感谢您还提供带有 setValues() 的第二个示例。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-05
    • 2021-07-28
    • 1970-01-01
    相关资源
    最近更新 更多