我一直在使用Adwords脚本创建自定义报告。该报告只是填充了一张google工作表,其中包含各种关键字的所需数据点。我已经使用.getRange()
和.setValues()
方法填充了Google表格中的某些表格单元格,但是,在插入实际数据时,我在日志中遇到以下错误:
范围的坐标或尺寸无效。 (第73行)
第73行看起来像这样:
sheet.getRange(4, 1, rows.length, 8).setValues(rows);
起初我认为rows.length可能是罪魁祸首,但当我将其更改为数字时(出于测试目的),我得到了一个不同的错误:
范围高度不正确,为0但应为20(第73行)
在代码的其他地方,我使用.getRange两次,这些单元格填充没有问题。它们是我动态插入的帐户名称和日期。我究竟做错了什么?我无法理解它给我的错误或如何解决它。
以下是整个脚本的副本:
var ROOT_FOLDER_NAME = 'Keyword Performance';
var SPREADSHEET_URL = 'exampleURL.com';
var ACCT_REPEATER = MccApp.accounts().get();
var ACCOUNTS = [];
var rows=[];
function main() {
var folder = DriveApp.getFoldersByName(ROOT_FOLDER_NAME).next();
var formattedDate = Utilities.formatDate(new Date(), 'GMT', 'MMM d, YYYY');
while (ACCT_REPEATER.hasNext()) {
processAccount(ACCT_REPEATER.next(), folder);
}
}
function processAccount(account, rootFolder) {
MccApp.select(account);
var spreadsheet = copySpreadsheet(SPREADSHEET_URL, rootFolder, account.getName());
var sheet = spreadsheet.getSheetByName('Template');
var acctName = account.getName().split("- ").pop();
sheet.getRange(2, 2, 1, 1).setValue(new Date());
sheet.getRange(2, 6, 1, 1).setValue(acctName);
outputData(account, sheet);
}
function copySpreadsheet(spreadsheetUrl, rootFolder) {
var fileName = "Keyword Quality Score Report";
var copy = SpreadsheetApp.openByUrl(spreadsheetUrl).copy(fileName);
while (ACCT_REPEATER.hasNext()) {
var sheet = copy.getSheetByName('Template');
var account = ACCT_REPEATER.next().getName().split("- ").pop();
copy.insertSheet(account, 1, {template: sheet});
copy.getSheetByName(account).getRange(2, 2, 1, 1).setValue(new Date());
copy.getSheetByName(account).getRange(2, 6, 1, 1).setValue(account);
}
var newFile = DriveApp.getFileById(copy.getId());
var oldParent = newFile.getParents().next();
oldParent.removeFile(newFile);
rootFolder.addFile(newFile);
return SpreadsheetApp.openByUrl(newFile.getUrl());
}
function outputData(account, sheet) {
MccApp.select(account);
var keywordIterator = AdWordsApp.keywords().get();
if (keywordIterator.hasNext()) {
while (keywordIterator.hasNext()) {
var keyword = keywordIterator.next();
var stats = keyword.getStatsFor('TODAY');
var row = [
keyword.getCampaign().getName(),
keyword.getAdGroup().getName(),
keyword.getText(),
keyword.getQualityScore(),
stats.getImpressions(),
stats.getClicks(),
stats.getCost(),
stats.getAveragePosition()
];
if (keyword.getCampaign().isEnabled()){
rows.push(row);
}
sheet.getRange(4, 1, 20, 8).setValues(rows);
//Logger.log(row[1]);
}
}
}