Google 通讯录脚本慢

Google Contacts script slow

我的目标很简单,就是从数据范围将联系人添加到 Google 联系人应用程序并将它们标记为 "Coworkers' and "我的联系人”,这样我就可以在我的 phone.下面是我刚刚想出的工作代码

function myFunction() {

  //deletecontacts();
  var gn=SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Leader Directory (Read only)');
  var systemcon=ContactsApp.getContactGroup('System Group: My Contacts');
  var systemmy=ContactsApp.getContactGroup('System Group: Coworkers');
  var valuerng=gn.getRange("A2:H138").getValues();

  for (var i=0;i<=gn.getLastRow()-2;i++){
    var newcontact=ContactsApp.createContact(valuerng[i][0],'' , valuerng[i][1]);
    newcontact.addPhone('MOBILE_PHONE',valuerng[i][2]);
    newcontact.addAddress('Chapel', valuerng[i][6]);
    newcontact.addAddress('Mailing', valuerng[i][4]);
    newcontact.addCompany(valuerng[i][7],'');
    systemmy.addContact(newcontact);
    systemcon.addContact(newcontact)
          }

      }

任何人都可以修改它们以便 运行 更快吗?如果我只是将整个 csv 上传到联系人应用程序,它只需要 3 秒,但我的代码需要大约 3 分钟。另一个问题是为什么添加新创建的联系人的代码只能在最后 运行 或者更多的时候,

 systemmy.addContact(newcontact);
    systemcon.addContact(newcontact)

如果在创建新联系人后立即执行它们,是否会 return 随机联系人为 null 并退出该功能?

你的脚本之所以慢是因为你的 for 循环中的每条指令实际上都在发出一个 update 请求,导致四个 update 请求和一个 post请求(创建联系人时)。

不幸的是,由于您使用的所有方法 - addPhone()addAddress()addCompany() - expect,无法将其减少到只有一个 update 请求Contact 但 return 是不同的类型,因此,不可能一个接一个地调用它们。

由于这对您来说不是一个可行的选择,您可能需要查看 People API

您可以发送此 POST 请求:

POST https://people.googleapis.com/v1/people:createContact

具有以下请求正文:

{
  "names": [],
  "emailAddresses": [],
  "phoneNumbers": [],
  "addresses": [],
  "organizations": []
}

参考