Перенос контактов в таблицы с помощью Google Apps Script

Что делает скрипт? 
1. Получает контакты из списка, который отображается у Вас в телефоне. 
2. Осуществляет поиск полей:

  • ФИО 
  • Компания
  • Должность
  • Номера телефонов (только два первых). Т.к. способов записать номер телефона точно больше двух, скрипт обрабатывает Российские номера и передаёт в таблицу без знака +.
  • Адреса e-mail адресов (тоже только два первых)
  • День рождения
  • Заметки

3. Передаёт их в текущий лист таблицы, затем сортирует по ФИО.

Изначально скрипт взят с сайта https://ignatov-script.blogspot.com/2018/11/google.html

и имеет недоработки, для чего он был доработан и улучшен для более комфортной работы с базой контактов.

function getAllContacts() {

  var ss = SpreadsheetApp.getActiveSheet();

  var group = ContactsApp.getContactGroup(‘System Group: My Contacts’);

  var contactsArray = group.getContacts();

  var contactsData = [];

  // Заголовки столбцов

  var headers = [[‘Full Name’, ‘Company’, ‘Job Title’, ‘Phone 1’, ‘Phone 2’, ‘Email 1’, ‘Email 2’, ‘Notes’, ‘Birthday’]];

  contactsData.push.apply(contactsData, headers);

  for (var i = 0; i < contactsArray.length; i++) {

    var company = contactsArray[i].getCompanies().length;

    var company1 = ”, work = ”;

    if (company > 0) {

      company1 = contactsArray[i].getCompanies()[0].getCompanyName();

      work = contactsArray[i].getCompanies()[0].getJobTitle();

    }

    var phones = contactsArray[i].getPhones();

    var Phone1 = ”, Phone2 = ”;

    if (phones[0] != undefined) {

      Phone1 = phones[0].getPhoneNumber().replace(‘+7’, ‘7’);

      Phone1 = Phone1.replace(/\+/g, ”).replace(/\(/g, ”).replace(/\)/g, ”).replace(/ /g, ”).replace(/\-/g, ”);

      if (Phone1.charAt(0) == ‘8’) {

        Phone1 = Phone1.replace(‘8’, ‘7’);

      }

    }

    if (phones[1] != undefined) {

      Phone2 = phones[1].getPhoneNumber().replace(‘+7’, ‘7’);

      Phone2 = Phone2.replace(/\+/g, ”).replace(/\(/g, ”).replace(/\)/g, ”).replace(/ /g, ”).replace(/\-/g, ”);

      if (Phone2.charAt(0) == ‘8’) {

        Phone2 = Phone2.replace(‘8’, ‘7’);

      }

    }

    var mails = contactsArray[i].getEmails();

    var mail1 = ”, mail2 = ”;

    if (mails[0] != undefined) {

      mail1 = mails[0].getAddress();

    }

    if (mails[1] != undefined) {

      mail2 = mails[1].getAddress();

    }

    var birth = ”;

    var dates = contactsArray[i].getDates();

    var realMonth = 0;

    if (dates[0]) {

      switch (dates[0].getMonth().toString()) {

        case ‘JANUARY’:

          realMonth = ’01’;

          break;

        case ‘FEBRUARY’:

          realMonth = ’02’;

          break;

        case ‘MARCH’:

          realMonth = ’03’;

          break;

        case ‘APRIL’:

          realMonth = ’04’;

          break;

        case ‘MAY’:

          realMonth = ’05’;

          break;

        case ‘JUNE’:

          realMonth = ’06’;

          break;

        case ‘JULY’:

          realMonth = ’07’;

          break;

        case ‘AUGUST’:

          realMonth = ’08’;

          break;

        case ‘SEPTEMBER’:

          realMonth = ’09’;

          break;

        case ‘OCTOBER’:

          realMonth = 10;

          break;

        case ‘NOVEMBER’:

          realMonth = 11;

          break;

        case ‘DECEMBER’:

          realMonth = 12;

          break;

      }

      birth = dates[0].getDay() + ‘.’ + realMonth + ‘.’ + dates[0].getYear();

    }

    var notes = contactsArray[i].getNotes();

    contactsData.push([contactsArray[i].getFullName(), company1, work, Phone1, Phone2, mail1, mail2, notes, birth]);

  }

  if (contactsData.length > 0) {

    // Запись данных в таблицу

    ss.clear(); // Очистка содержимого перед обновлением

    ss.getRange(1, 1, contactsData.length, contactsData[0].length).setValues(contactsData);

    // Применение стилей к заголовкам столбцов

    var headerRange = ss.getRange(1, 1, 1, contactsData[0].length);

    headerRange.setFontWeight(‘bold’);

    headerRange.setBorder(true, true, true, true, true, true);

  }

}

// Функция для запуска скрипта каждую неделю

function scheduleGetAllContacts() {

  var triggerDay = 1; // День недели для запуска (1 – Понедельник, 2 – Вторник и т.д.)

  var now = new Date();

  var dayOfWeek = now.getDay();

  var daysUntilTrigger = triggerDay – dayOfWeek;

  if (daysUntilTrigger <= 0) {

    daysUntilTrigger += 7; // Если уже прошел день запуска на текущей неделе, то следующий запуск будет в следующий понедельник

  }

  var triggerDate = new Date(now.getFullYear(), now.getMonth(), now.getDate() + daysUntilTrigger, 0, 0, 0);

  ScriptApp.newTrigger(‘getAllContacts’)

    .timeBased()

    .at(triggerDate)

    .create();

}

function onOpen(){

  // функция добавляет меню и добавляет подменю

  let rakendus=SpreadsheetApp.getActiveSpreadsheet();

  let menuItems=[

    {name: ‘Обновить контакты’, functionName: ‘getAllContacts’}

  ];

  rakendus.addMenu(‘VitaliiSokhan’, menuItems);

}