Adwords脚本未写入Google工作表

时间:2017-11-22 16:30:24

标签: javascript google-sheets google-adwords adwords-apiv201402

我最近制作了一个脚本,用于从Adwords API报告KEYWORDS_PERFORMANCE_REPORT获取信息,该报告将信息输出到Google工作表,并且工作正常。

我决定为扩展程序制作另一份报告,我基本上做的是复制并通过旧代码更改google工作表的URL以及应该使用PLACEHOLDER_REPORT而不是关键字one的报告,以及一些指标。

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

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());

}

我知道它找到了工作表,因为它清除了标题下面的行,就像它应该的那样,并在运行时输入日期和时间。

记录器显示outputValue的长度为293,所以它肯定会得到东西并记录outputValue[0]的东西,所以我不知道为什么它不会写入工作表。

我打电话给adwords帮助热线,但他们说他们没有接受过api的训练,所以他们不知道怎么了最新的,而且我用Google搜索没有成功

1 个答案:

答案 0 :(得分:0)

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

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

用这一行替换你的最后一行,最后一个参数是你要写的列数,所以在你的情况下是4,也改变你的代码的逻辑,这样它最终会写入值,而不是每次迭代! / p>