在谷歌表格中我有:
Range B1:B260
我有这个功能:
(ImportXML(A1;"//a/@href")
(ImportXML(A2;"//a/@href")
(ImportXML(A3;"//a/@href")
.
.
.
(ImportXML(A260;"//a/@href")
我需要延迟计算之间的时间,因为如果我同时执行此操作,我将得到 #REF!
因为 API 和 =ImportXML()
的限制
每个单元计算延迟10秒就可以了
我尝试创建一个 =LEN()
函数仅在字符数大于 X 时才在单元格中执行计算...但它只延迟了一小部分时间。
使用sleep(milliseconds)
在谷歌脚本中我可以得到一个公式sleep(B1:B260,5000)
?延迟 ImportXML、Importdata、Import... 过程?
最佳答案
您可以使用 Utilities.sleep(milliseconds)
函数在两个单独的远程 API 调用之间进行休眠。请参阅下面的示例:
function runScraper() {
var resultRange = SpreadsheetApp.getActive().getRange("B1:B260");
var urlRange = SpreadsheetApp.getActive().getRange("A1:A260");
for (var i=1; i<=urlRange.getHeight(); i++) {
var currentValue = resultRange.getCell(i, 1).getValue();
if (currentValue !== "") continue;
var url = urlRange.getCell(i, 1).getValue();
var result = scrape(url);
resultRange.getCell(i, 1).setValue(result);
Utilities.sleep(10000);
}
}
至于实现 scrape(url)
功能,实现取决于您使用的 API 以及使用的数据传输格式是什么(JSON、XML...)。为此,我建议您检查以下链接:
- URLFetchApp.fetch():https://developers.google.com/apps-script/reference/url-fetch/url-fetch-app#fetch(String,Object)
- XMLService:https://developers.google.com/apps-script/reference/xml-service
- 使用外部 API:https://developers.google.com/apps-script/guides/services/external
免责声明
Google Apps 脚本的最长运行时间为 6 minutes 。如果每次调用等待 10 秒并总共发出 260 次调用,则将超出最大运行时间。为此,在上面的代码中,我实现了一项检查,该检查将验证正在处理的行尚未被刮除。如果已经被刮过,则直接进入下一个。这将使您可以轻松地重新运行脚本并从上次停止的位置(由于超时)继续。
关于google-apps-script - 如何在谷歌表格中创建函数 sleep(毫秒) 以延迟或暂停一定范围内的公式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58431056/