从 Google 个联系人中删除重复或多的联系人

Delete duplicated or multiplied contacts from Google Contacts

我的目标是传播sheet 客户的联系信息、地址和备注,创建新的 Google 联系人条目并提取联系人 ID 和 "addedAlready"到 sheet,它标记联系人已经输入到 Google 联系人 sheet 上的 "ADDED",我成功地做到了。一切正常,问题仅在于 Google 联系人中同一个人的多个错误条目,因为每当升级联系人时,它都会创建新条目。

function createContact() {
  var alreadyAdded = "ADDED";
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet2");
  var startRow = 5;  // First row of data to process
  var numRows = sheet.getRange('J2').getValue(); // Last row of data to process

  // Fetch the range of cells A5:J
  var dataRange = sheet.getRange(startRow, 1, numRows, 10)

  // Fetch values for each row in the Range.
  var data = dataRange.getValues();
    for (var i = 0; i < data.length; ++i) {
    var row = data[i];
    var addedAlready = row[0]
    var firstName = row[1]
    var lastName = row[2]
    var company = row[3]  
    var phone = row[4]
    var notes = row[5]
    var address = row[6]
    var email = row[7];

      if (addedAlready != alreadyAdded) {
      // Create contact in Google Contacts and retrieve ID
      var contact = ContactsApp.createContact(firstName, lastName, phone);
      var group = ContactsApp.getContactGroup("System Group: My Contacts");
      group.addContact(contact);
      var id = contact.getId();

      // Add values to new contact
      contact.addCompany(company, "");
      contact.addPhone(ContactsApp.Field.WORK_PHONE, phone);
      contact.setNotes(notes);
      contact.addAddress(ContactsApp.Field.WORK_ADDRESS, address);
      contact.addEmail(ContactsApp.Field.WORK_EMAIL, email);
      sheet.getRange(startRow + i, 1).setValue(alreadyAdded);
      sheet.getRange(startRow + i, 9).setValue(id);
      }; 
    };

};

下面还有 "onEdit" 脚本,它删除 "ADDED" 状态并使联系人能够更新,或者换句话说,在 Google 联系人中加倍。

function onEdit(e){
  var sh=e.range.getSheet();
  if(sh.getName()=="Sheet1" && e.range.columnStart==2,4,5,6 && e.range.rowStart>4) {
    var sh2=e.source.getSheetByName("Sheet2");
    sh2.getRange(e.range.rowStart,1,e.range.rowEnd-e.range.rowStart+1,1).clearContent()  
  }
} 

为了解决和消除这个问题,我现在想问问你们,因为我在这里完全迷路了,如果有人能帮我创建一个脚本,从 Google 联系人中检索所有现有的联系人 ID 和将它们与 "I" 列中的联系人 ID 进行比较,并删除 Google 联系人中 ID 与 "I" 列中的 ID 不匹配的所有条目。

如有任何帮助,我们将不胜感激!非常感谢!

如果我理解正确的话:

  • 您在 I 列中有不同的联系人 ID。
  • 您想从 Google 个 id 不在列 I 中的联系人中删除任何联系人。

如果是这样,那么你可以这样做:

function deleteContacts() {
  var contactIds = ContactsApp.getContacts().map(function(contact) {
    return contact.getId(); // Get current contact ids
  });
  var sh = SpreadsheetApp.getActive().getSheetByName("Sheet1"); // Please change accordingly
  var currentIds = sh.getRange("I:I").getValues().map(function(value) {
    return value[0];
  }).filter(function(val) {
    return val != "";
  })
  for (var i = 0; i < contactIds.length; i++) {
    if (currentIds.indexOf(contactIds[i]) == -1) {
      var contact = ContactsApp.getContactById(contactIds[i]);
      ContactsApp.deleteContact(contact);
    }
  }
}

此脚本执行以下操作:

  • 获取所有当前联系人的 ID(变量 contactIdsgetContacts()
  • 获取 Sheet1I 列中的所有值(变量 currentIds)。
  • 对于联系人中的每个 ID,通过 indexOf(). If that's not the case, remove the contact (first retrieve it via getContactById(id) and then delete it via deleteContact(contact)) 检查它是否存在于列 I 中。

参考:

希望对您有所帮助。