如何修改Google Apps Script仅导入「我的联系人」至Google Sheets两列?
解决Google Apps Script获取「我的联系人」并拆分姓名到表格的问题
问题根源
直接调用ContactApp.getContactGroup('My Contacts')失效,是因为Google账户的系统默认分组「我的联系人」名称会随语言环境变化——中文环境下实际分组名称是「我的联系人」而非英文"My Contacts",用错名称自然无法获取到目标分组。
修复后的完整脚本
function importContacts() { // 用系统分组ID「myContacts」获取「我的联系人」,不受语言环境影响 var contactGroup = ContactApp.getContactGroup("myContacts"); // 兼容部分特殊环境,ID获取失败时尝试中文名称 if (!contactGroup) { contactGroup = ContactApp.getContactGroup("我的联系人"); } var contacts = contactGroup.getContacts(); var output = []; for (var i = 0; i < contacts.length; i++) { var contact = contacts[i]; // 分别提取姓氏和名字 var familyName = contact.getFamilyName(); var givenName = contact.getGivenName(); // 确保至少有一项名称存在再添加到输出数组 if (familyName || givenName) { output.push([familyName || "", givenName || ""]); } } var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Contacts list"); // 清空原有数据(避免重复导入) sheet.clearContents(); // 将数据写入表格,姓氏在A列,名字在B列 if (output.length > 0) { sheet.getRange(1, 1, output.length, 2).setValues(output); } }
核心优化说明
- 优先使用系统分组ID
myContacts获取目标分组,彻底避免语言环境导致的名称不匹配问题 - 增加中文名称的 fallback 逻辑,兼容特殊场景
- 改用
getFamilyName()和getGivenName()拆分姓名,分别对应表格的两列 - 加入清空旧数据的逻辑,防止多次运行后数据重复
- 处理姓名项为空的情况,避免表格出现无效空行
内容的提问来源于stack exchange,提问作者horsefish
相关产品推荐
相关产品推荐

