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 只是向下滚动我会看到它。解决了这个问题,现在一切都很好。
我最近制作了一个脚本来从 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 只是向下滚动我会看到它。解决了这个问题,现在一切都很好。