【问题标题】:Run Google spreadsheet macro without time restriction不受时间限制地运行 Google 电子表格宏
【发布时间】:2018-07-13 09:50:05
【问题描述】:

我正在尝试运行一个 google 电子表格宏 (macro.gs),该宏必须下载属于某个域的大量 google 站点链接,但执行需要很长时间,因此脚本结束并且它不是尚未完成。我读到这就是设计成那样(限时执行),所以我无能为力。

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);
  }
};

但是,我还读到我可以尝试使用 Google Apps 脚本运行“任务队列”以在没有时间限制的情况下运行它,但我不确定是否可以在任务中运行电子表格宏来规避那个时间限制。

到目前为止,我所阅读的所有内容都没有提供任何有关如何操作的信息。

【问题讨论】:

  • 有很多宏任务应该只需要一两秒钟,但如果实施不当(阅读:按记录使用)可能需要更多更长的时间。一些示例是将值复制到不同的位置并更改格式。我建议您分享一个代码示例或描述一下您的宏在做什么。另外:您应该提供对您进行的研究的参考。 Apps Script 代码总是有时间限制的,但持续时间因使用环境而异(从 30s 到 30m,通常为 6m)。
  • 我已经添加了被执行的脚本。我认为问题不在于实施,而在于有很多站点。
  • 创建一个输出数组并使用setValues()而不是appendRow。也分享您的执行记录以进一步优化。

标签: google-apps-script google-sheets google-sheets-macros


【解决方案1】:

仅当您的工作表易变时才适用,例如:您无法确定在计算最后一行和添加新数据之间添加了新数据。

另一种方法是构建您的输出,然后在一次写入中将其序列化,使用setValues 和矩形二维Array

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 协作平台的任何 Apps 脚本代码仅处理“旧”版本的 Google 协作平台 - 无法访问使用新版本制作的代码:

网站的重建版本于 2016 年 11 月 22 日推出。Apps 脚本目前无法访问或修改使用此版本创建的网站,但脚本仍可以访问经典网站。

参考文献

【讨论】:

    猜你喜欢
    • 2011-03-10
    • 2023-03-28
    • 1970-01-01
    • 2016-12-27
    • 1970-01-01
    • 2014-02-07
    • 1970-01-01
    • 1970-01-01
    • 2023-01-15
    相关资源
    最近更新 更多