超过最大执行时间(Google表格脚本)

时间:2018-07-16 08:04:44

标签: javascript google-apps-script gmail

我正在使用脚本将一长串电子邮件(在一个标签下)转发到新帐户。但是,我遇到了超出最大执行时间的错误,甚至四分之一也没有。我想知道是否有解决方法,也许可以将变量存储在工作表上并在设置的时间后恢复?我不太熟悉编码,因此对此有所帮助。

function forwardMail() {
  var data = SpreadsheetApp.getActiveSheet().getRange("A2:B11").getValues();
  for (i in data) {
    var row = data[i];
    var name = row[0].toString();
    var email = row[1].toString();
    var label = GmailApp.getUserLabelByName(name);
    if (label && (email != "")) {
      var threads = label.getThreads();
      for (var x in threads) {
        var messages = threads[x].getMessages();
        for (var y in messages) {
          var subject = messages[y].getSubject();
          messages[y].forward(email, {
            subject: subject});
        }
        threads[x].removeLabel(label);
      }
    }
  }
}

1 个答案:

答案 0 :(得分:0)

此脚本应在执行过程中处理电子表格中的一行。在接下来的执行中,它将运行下一行,依此类推。它仍然可以使用一些工作,但这是一个不错的起点,并希望传达我的想法,以帮助您规避最大执行时间。

这里的想法是您在C列中设置一个值,以指示记录已被处理。当脚本再次运行时,它将从下一条记录继续。仍然需要一些功能来阻止它尝试运行空白行。但我相信您可以解决这个问题。

一旦您解决了这些小问题,您可以将其置于触发器上,以每1或5分钟运行一次。 (取决于执行时间有多长。)

这是我过去击败执行时间的方式。 一如既往,希望这会有所帮助。

    public function show(Post $post)
{
    $count = $post->comments()->count();
    $comments = $post->comments()->where('approved',true)->get();
    return view('site/post/show',compact('post','comments','count'));
}