从 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(变量
contactIds
)getContacts()。
- 获取
Sheet1
的 I
列中的所有值(变量 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
中。
参考:
- ContactsApp.getContacts()
- Array.prototype.indexOf()
- ContactsApp.getContactById(id)
- ContactsApp.deleteContact(contact)
希望对您有所帮助。
我的目标是传播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(变量
contactIds
)getContacts()。 - 获取
Sheet1
的I
列中的所有值(变量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
中。
参考:
- ContactsApp.getContacts()
- Array.prototype.indexOf()
- ContactsApp.getContactById(id)
- ContactsApp.deleteContact(contact)
希望对您有所帮助。