谷歌脚本最长执行时间 - 返回谷歌群组电子邮件(巨大的列表)

时间:2017-02-22 11:06:26

标签: google-apps-script

我试图将Google群组电子邮件保存到电子表格中,但我得到了“最长执行时间”错误。有什么想法吗?

function listGroupMembers() {
     var GROUP_EMAIL = "prgg@googlegroups.com";
     var group = GroupsApp.getGroupByEmail(GROUP_EMAIL);
     var users = group.getUsers();
     var sheet = SpreadsheetApp.create("Group Mail");

     for (var i = 0; i < users.length; i++) {
       sheet.appendRow([users[i]]);
     }
}

1 个答案:

答案 0 :(得分:0)

appendRow()电话可能占用大部分时间。 你应该构建一个包含所有值的数组,并在工作表中一次写入。

代码可能是这样的:

function listGroupMembers() {
     var GROUP_EMAIL = "prgg@googlegroups.com";
     var group = GroupsApp.getGroupByEmail(GROUP_EMAIL);
     var users = group.getUsers();
     var sheet = SpreadsheetApp.create("Group Mail");
     var values = [];
     for (var i = 0; i < users.length; i++) {
       values.push([users[i]]);
     }
  sheet.getRange(1,1,values.length, values[0].length).setValues(values);
}

修改

我没有检查您的初始代码的开头,SpreadsheetApp.create("Group Mail");会返回一个电子表格,而不是表单......这就是getRange失败的原因。

由于它不清楚您想要获得什么,我假设您想要创建一个具有该名称的新工作表,如果它不存在的话。 适当的代码是这样的:

function listGroupMembers() {
   var GROUP_EMAIL = "prgg@googlegroups.com";
   var group = GroupsApp.getGroupByEmail(GROUP_EMAIL);
   var users = group.getUsers();
   if(SpreadsheetApp.getActive().getSheetByName("Group Mail") == null){
    var sheet = SpreadsheetApp.getActive().insertSheet("Group Mail");
  }else{
    var sheet = SpreadsheetApp.getActive().getSheetByName("Group Mail");
  }  
  var values = [];
  for (var i = 0; i < users.length; i++) {
    values.push([users[i]]);
  }
  sheet.getRange(1,1,values.length, values[0].length).setValues(values);
}