2017-09-17 62 views
0

我正在使用谷歌床单,并从未在这里运行“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); 
} 

所以我有一个功能,该代码被触发每隔一小时在我的特殊考点我的谷歌表格。

但是,数据仅填充每个站点的一个单元格,即公式分配给的单元格。

当使用谷歌床单,我如何修改这个为了让它每隔一小时填写一个新的单元格列?我是否修改此代码,是否必须设置另一个函数,或者是否有选项将单元格填充到列中?

回答

1

该函数可以修改为写入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值下它放置。

+0

超级评论,谢谢!它似乎工作,但放置数据时,似乎将数据放在不正确的列中。任何想法为什么?我打算建立一个对象,如果这与网站的键和值的列的工作,但迄今为止使用3个独立的函数,所有的数据似乎被放在最后一列。还有一件事,这使用ActiveSpreadsheet,电子表格不必保持打开在电脑上呢?谢谢! – nyhunter77

+0

哦,我想我知道为什么数据进入错误的单元格,我使用相同的函数名称。检查...但另一个问题? – nyhunter77

+1

假设您的脚本绑定到电子表格(意味着它是使用电子表格中的脚本编辑器输入的),这就是“活动电子表格”所指的内容。这是所有服务器端,而不是浏览器中打开的内容。 – FTP

相关问题