【问题标题】:How to speed up copying/creating a file many times in Google Apps Script?如何在 Google Apps 脚本中多次加快复制/创建文件的速度?
【发布时间】:2019-05-26 09:44:02
【问题描述】:

所以,我正在大学里设置学生调查。有很多表格要分发给许多学生群体。对于一项特定的调查,我有一个模板谷歌表格。

我所做的是一个循环,在每次迭代时都会创建此模板的副本,然后对其进行一些修改。这需要很多时间。谷歌复制和修改 220 份表格大约需要 40 到 50 分钟。我找到了绕过谷歌脚本的时间限制的方法,但它仍然太长了。你有什么办法可以加快速度吗?

现在它看起来像这样:

for(some range):{
   template.makeCopy("template", formsFolder);      
   var formFile = formsFolder.getFilesByName("template").next();
   var form = FormApp.openById(formFile.getId())
//   ... do some modifications
  }

谢谢!

【问题讨论】:

    标签: google-apps-script google-drive-api google-forms


    【解决方案1】:

    File#makeCopy 已经为您提供了您想要的确切文件,因此您完全无需搜索您创建的文件:

    for (var f = 0; f < newNames.length; ++f) {
      var formFile = template.makeCopy(newNames[f], formsFolder);
      var form = FormApp.openById(formFile.getId());
      // Do stuff
    }
    

    【讨论】:

      【解决方案2】:

      我很惊讶您的脚本实际上完成并且没有超时,因为最大脚本运行时间是30 minutes or so dependent on your edition。我遇到了一个非常相似的障碍,我需要在 200-300 个不同的工作表上运行脚本并复制数据。对 API 的调用次数约为每个循环 3-5 次,然后是一些 javascript 在写入工作表之前过滤该数据集。它会经常失败。

      我发现我最好的方法是利用触发器,而不是一次处理 300 张纸,而是每 5 分钟左右处理 100 张纸。在我的情况下,只要我的过滤参数准确,就没有理由必须同时处理这些表格。我会通过工作表上的输入来控制所有参数。

      【讨论】:

      • 就我而言,我创建了一个单独的 js 函数,该函数运行我的主脚本,每次运行 20 个循环,并在创建完所有表单后完成。这样它不会超时(每次脚本运行不到 5 分钟),但仍然需要很长时间。
      • 如果您遵循 Google 应用脚本的最佳做法,我认为您无能为力。在某种程度上,您正在与会话期间进行的 API 调用数量作斗争。 developers.google.com/apps-script/guides/support/best-practices
      猜你喜欢
      • 2022-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-25
      • 1970-01-01
      • 1970-01-01
      • 2021-12-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多