Google apps script 不受时间限制运行Google电子表格宏
我正在尝试运行一个google电子表格宏(macro.gs),该宏必须下载大量属于某个域的google站点链接,但执行该宏需要很长时间,因此脚本将结束,但尚未完成。我读到过这样的设计(有时间限制的执行),所以我在那里做不了什么Google apps script 不受时间限制运行Google电子表格宏,google-apps-script,google-sheets,google-sheets-macros,Google Apps Script,Google Sheets,Google Sheets Macros,我正在尝试运行一个google电子表格宏(macro.gs),该宏必须下载大量属于某个域的google站点链接,但执行该宏需要很长时间,因此脚本将结束,但尚未完成。我读到过这样的设计(有时间限制的执行),所以我在那里做不了什么 function listSites() { var domain="domain"; var PAGE_LENGTH=200; sheet = SpreadsheetApp.getActiveSheet(); var sites = SitesApp.g
function listSites() {
var domain="domain";
var PAGE_LENGTH=200;
sheet = SpreadsheetApp.getActiveSheet();
var sites = SitesApp.getAllSites(domain,0,PAGE_LENGTH);
for(var i=0; sites.length != 0; i+=PAGE_LENGTH){
for (var j=0; j<sites.length; j++) {
sheet.appendRow([sites[j].getUrl()]);
}
sites = SitesApp.getAllSites(domain, i, PAGE_LENGTH);
}
};
函数列表站点(){
var domain=“domain”;
变量页长度=200;
sheet=SpreadsheetApp.getActiveSheet();
var sites=SitesApp.getAllSites(域,0,页面长度);
对于(变量i=0;sites.length!=0;i+=页面长度){
对于(var j=0;j而言,仅当工作表不稳定时才添加行,例如,您无法确定在计算最后一行和添加新数据之间是否添加了新数据
另一种方法是构建输出,然后在一次写入中使用带有矩形2d数组的setValues
对其进行序列化:
function writeAllSiteUrls() {
const domain = "domain",
PAGE_LENGTH = 200,
output = [];
var i = 0;
do {
var search = SitesApp.getAllSites(domain, i * PAGE_LENGTH, PAGE_LENGTH);
var urls = search.map(function (site) {
return site.getUrl();
});
Array.prototype.push.apply(output, urls);
++i;
} while (search.length);
if (!output.length)
return;
const sheet = SpreadsheetApp.getActiveSheet();
sheet.getRange(sheet.getLastRow() +1, 1, output.length, output[0].length).setValues(output);
}
你当然可以构建一个更复杂的返回对象,而不仅仅是站点URL,但这不是你真正的问题。还要注意的是,任何处理Google站点的应用程序脚本代码都只处理“旧”版本的Google站点-使用新版本创建的应用程序脚本代码无法访问:
2016年11月22日发布了站点的重建版本。应用程序脚本当前无法访问或修改使用此版本创建的站点,但脚本仍可以访问经典站点
参考资料
许多宏任务只需一两秒钟,但如果执行不当(读取:按记录使用)可能需要更长的时间。有些示例可能会将值复制到不同的位置并更改格式。我建议您共享一个代码示例或描述一点宏正在执行的操作。此外:您应该提供执行研究的参考。应用程序脚本代码始终有时间限制,但持续时间会根据使用环境而变化t(从30秒到30米,通常是6米)。我添加了执行的脚本。我认为问题不在于实现,而在于有很多站点。创建一个输出数组,并使用setValues()
而不是appendRow。共享您的执行记录以进一步优化。