Удалить дублированные или умноженные контакты из контактов Google - PullRequest
0 голосов
/ 28 января 2020

Моя цель состояла в том, чтобы создать электронную таблицу клиентов с их контактной информацией, адресами и примечаниями, которая создаст новые записи в контактах Google и перетянет идентификатор контакта и «добавлено уже» на лист, который помечает контакты, уже введенные в контакты Google с помощью ». ДОБАВЛЕНО »на листе, что я успешно сделал. Все работает нормально, проблема только в нескольких неправильных записях одного и того же человека в Контактах 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", который удаляет "ДОБАВЛЕНО" статус и позволяет обновить контакт или, другими словами, удвоить в контактах 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, сравнивать их с идентификаторами conatct в столбце «I» и удалять все записи в контактах Google, которые не соответствуют идентификаторам в столбце «I».

Любая помощь будет принята с благодарностью! Большое спасибо!

1 Ответ

0 голосов
/ 29 января 2020

Если я вас правильно понимаю:

  • У вас есть разные идентификаторы контактов в столбце I.
  • Вы хотите удалить любой контакт из контактов 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);
    }
  }
}

Этот скрипт выполняет следующие действия:

  • Получить идентификаторы всех текущих контактов (переменная contactIds) с помощью getContacts () .
  • Получить все значения в столбце I из Sheet1 (переменная currentIds) .
  • Для каждого идентификатора в Контактах проверьте, существует ли он в столбце I с помощью indexOf () . Если это не так, удалите контакт (сначала получите его с помощью getContactById (id) , а затем удалите его с помощью deleteContact (contact) ).

Ссылка:

Надеюсь, это поможет.

...