我有一个包含URL列表的电子表格。 我正在尝试搜索URL是否包含特定类,并根据响应我将在其旁边的单元格中设置0或1。 我已经制作了一个脚本,它可以达到目的,但是我遇到了执行超时错误,所以我想有什么办法可以减少执行时间。
这是代码
function ulrFetch(){
var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1');
var class = ss.getRange(1, 5).getValue();
var lr = ss.getLastRow();
var urlList = ss.getRange(3, 8, lr-1).getValues();
var length = urlList.length
for (var i = 0;i<length;i++){
var url = urlList[i];
var response = UrlFetchApp.fetch(url.toString());
var result = response.getContentText();
var index = result.indexOf(class);
if (index > -1){
ss.getRange(i+3, 5).setValue('1');
}
else {
ss.getRange(i+3, 5).setValue('0');
}
}
}
预先感谢!
答案 0 :(得分:1)
此修改如何?我以为fetchAll()可以使用720个请求。因此,我建议使用fetchAll()。修改后的脚本的流程如下。
urlList
创建请求。请进行如下修改。
来自:var urlList = ss.getRange(3, 8, lr-1).getValues();
至 :
var urlList = ss.getRange(3, 8, lr - 1 - 1).getValues();
通过此修改,可以检索第3行到最后一行的值。
和
来自:for (var i = 0;i<length;i++){
var url = urlList[i];
var response = UrlFetchApp.fetch(url.toString());
var result = response.getContentText();
var index = result.indexOf(class);
if (index > -1){
ss.getRange(i+3, 5).setValue('1');
}
else {
ss.getRange(i+3, 5).setValue('0');
}
}
至 :
var requests = urlList.map(function(e) {return {url: e[0]}});
var res = UrlFetchApp.fetchAll(requests);
var values = res.map(function(e) {return e.getContentText().indexOf(class) > -1 ? ["1"] : ["0"]});
ss.getRange(3, 5, values.length, 1).setValues(values);
如果我误解了你的问题,对不起。