Adwords 脚本未写入 google sheet

Adwords scripts not writing to google sheet

我最近制作了一个脚本来从 Adwords API 报告 KEYWORDS_PERFORMANCE_REPORT 中获取信息,该脚本将信息输出到 google sheet 并且运行良好。

我决定再做一份扩展报告,我基本上所做的就是复制并通过旧代码,将 URL 更改为 google sheet 以及它应该使用哪个报告 PLACEHOLDER_REPORT 而不是关键字一,以及一些指标。

脚本 运行 没有说有任何错误,但它没有将值输出到它应该的位置,或者根本没有输出值。

function processAccount()
{

  var report = AdWordsApp.report(
    "SELECT AccountDescriptiveName, CampaignName, ExtensionPlaceholderCreativeId, ExtensionPlaceholderType " +
    "FROM   PLACEHOLDER_REPORT " +
    "WHERE  CampaignStatus = ENABLED " +
    "DURING LAST_7_DAYS",
    {apiVersion: 'v201705'});

  var rows = report.rows();

  if (rows.hasNext()) 
  {
        writeReport(rows);
      }
    }    

function writeReport(rows) 
{
    var spreadsheet = validateAndGetSpreadsheet(URL);

      // Clear all rows in the Details tab of the spreadsheet below the header row.
      var clearRange = spreadsheet.getRangeByName('Headers')
        .offset(1, 0, spreadsheet.getSheetByName('Details')
            .getDataRange().getLastRow())
        .clearContent();

      // Build each row of output values in the order of the Report tab columns.
      var outputValues = [];
      while (rows.hasNext())
      {
        var row = rows.next();

    outputValues.push([
      row["AccountDescriptiveName"],  
      row["CampaignName"],
      row["ExtensionPlaceholderCreativeId"], 
      row["ExtensionPlaceholderType"],
      ]);
   }
  // Find the first open row on the Report tab below the headers and create a
  // range large enough to hold all of the failures, one per row.
  var lastRow = spreadsheet.getSheetByName('Details')
    .getDataRange().getLastRow();
  var headers = spreadsheet.getRangeByName('Headers');
  var outputRange = headers
    .offset(lastRow - headers.getRow() + 1, 0, outputValues.length);

  Logger.log("outputValue length is "+outputValues.length);
  outputRange.setValues(outputValues);
  Logger.log(outputValues[0]);

  spreadsheet.getRangeByName('Date').setValue(new Date());

}

我知道它会找到 sheet,因为它会像预期的那样清除 header 下面的行,并在 运行 时放置日期和时间。

记录器显示 outputValue 的长度为 293,因此它肯定会获取内容并将内容记录在 outputValue[0] 所以我不知道为什么它不会写入 sheet.

我打了 adwords 求助热线,但他们说他们没有接受过 api 方面的培训,所以他们不知道发生了什么,我 google 没有成功

每次运行时你只需要新值,所以我建议使用

spreadsheet.getRange(1, 1, data.length, 4).setValues(outputValues);

用这一行替换你的最后一行,最后一个参数是你要写的列数,所以在你的例子中是 4,​​还要改变你的代码逻辑,这样它会在最后写入值,而不是在每次迭代时写入!

原来我弄乱了输出范围,它输出的范围比它应该做的低 120 行,如果 id 只是向下滚动我会看到它。解决了这个问题,现在一切都很好。