使用Google表格,我如何每小时运行一次脚本并填充列中的每个单元格?
问题描述:
我正在使用谷歌床单,并从未在这里运行“cron job”。 为了给信贷,这是因为,我发现这个真棒代码,以帮助我访问速度见解API这里:https://statsravingmad.com/measure/page-speed-insights/使用Google表格,我如何每小时运行一次脚本并填充列中的每个单元格?
function speed(url,device,filter_third_party_resources,http_secure) {
url = url || 'www.statsravingmad.com';
strategy = 'desktop' || device;
filter_third_party_resources = 'true' || filter_third_party_resources;
http_secure = 'false' || http_secure ;
switch (http_secure) {
case 'false':
http_protocol = 'http://';
break;
case 'true':
http_protocol = 'https://';
break;
}
var key = 'api-key';
var api = 'https://www.googleapis.com/pagespeedonline/v2/runPagespeed?url=' + http_protocol + url
+ '&filter_third_party_resources=' + filter_third_party_resources +
'&strategy=' + strategy + '&key=' + key;
var response = UrlFetchApp.fetch(api, {muteHttpExceptions: true });
var result = JSON.parse(response.getContentText());
score = result.ruleGroups.SPEED.score;
return(score);
}
所以我有一个功能,该代码被触发每隔一小时在我的特殊考点我的谷歌表格。
但是,数据仅填充每个站点的一个单元格,即公式分配给的单元格。
当使用谷歌床单,我如何修改这个为了让它每隔一小时填写一个新的单元格列?我是否修改此代码,是否必须设置另一个函数,或者是否有选项将单元格填充到列中?
答
该函数可以修改为写入Sheet1的C列。下面是它将如何结束,而不是return(score)
(如果值直接写入电子表格,则不需要返回任何内容;函数将不会从电子表格中调用,而是从trigger中调用)。
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1");
var values = sheet.getRange("C:C").getValues(); // using column C
var lastRow = 1;
for (var i = 0; i < values.length; i++) {
if (values[i][0] != "") {
lastRow = i + 1;
}
}
sheet.getRange(lastRow + 1, 3).setValue(score); // column = 3 because C
在此,循环发现在列C中的最后一行中有数据,和score
值下它放置。
超级评论,谢谢!它似乎工作,但放置数据时,似乎将数据放在不正确的列中。任何想法为什么?我打算建立一个对象,如果这与网站的键和值的列的工作,但迄今为止使用3个独立的函数,所有的数据似乎被放在最后一列。还有一件事,这使用ActiveSpreadsheet,电子表格不必保持打开在电脑上呢?谢谢! – nyhunter77
哦,我想我知道为什么数据进入错误的单元格,我使用相同的函数名称。检查...但另一个问题? – nyhunter77
假设您的脚本绑定到电子表格(意味着它是使用电子表格中的脚本编辑器输入的),这就是“活动电子表格”所指的内容。这是所有服务器端,而不是浏览器中打开的内容。 – FTP