【问题标题】:Google Contacts script slow谷歌通讯录脚本慢
【发布时间】:2020-02-24 15:21:00
【问题描述】:

我的目标很简单,就是从数据范围内将联系人添加到 Google 通讯录应用中,并将它们标记为“同事”和“我的联系人”,这样我就可以在手机上使用它们。以下是我刚刚使用的工作代码想出了。

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)

如果在创建新联系人后立即执行,是否会在随机联系人处返回 null 并退出函数?

【问题讨论】:

  • 您好@KuanChunYeh,您的脚本使用的是哪个运行时:Rhino 还是 V8?干杯!
  • @ale13 感谢您的跟进。我使用的是 V8 运行时。

标签: google-apps-script google-sheets google-contacts-api


【解决方案1】:

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

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

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

您可以发送此POST 请求:

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

使用以下请求正文:

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

参考

【讨论】:

    猜你喜欢
    • 2015-05-31
    • 2014-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多