通过Google表格resourceName删除Google联系人失败求助
问题分析与解决方案
核心问题点
- 搜索联系人时未正确读取API返回的联系人列表,且未请求
resourceName字段,导致无法匹配目标资源 - 删除联系人的API调用参数格式错误
- 函数名拼写错误(
deleteContactPersoon应为deleteContactPerson) - 固定读取第2行数据,不符合“选择特定resourceName”的需求
修正后的完整代码
function deletePerson() { var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); // 获取当前选中单元格的resourceName,支持选择任意行的目标数据 var activeCell = sheet.getActiveCell(); var resourceName = activeCell.getValue(); if (!resourceName) { Browser.msgBox('错误', '请先选中包含有效resourceName的单元格', Browser.Buttons.OK); return; } // 搜索目标联系人 var contactPerson = searchContactPerson(resourceName); if (contactPerson) { var unstructuredName = contactPerson.names[0].unstructuredName; // 调用正确的删除函数名 deleteContactPerson(contactPerson.resourceName); Browser.msgBox('成功', `姓名为"${unstructuredName}"的联系人已删除`, Browser.Buttons.OK); } else { Browser.msgBox('失败', `resourceName为"${resourceName}"的联系人不存在`, Browser.Buttons.OK); } } // 根据resourceName查找联系人 function searchContactPerson(resourceName) { // 请求时必须包含resourceName字段,同时获取姓名用于提示 var response = People.People.Connections.list('people/me', { personFields: 'names,resourceName' }); // 正确遍历API返回的connections数组 var contacts = response.connections || []; for (var i = 0; i < contacts.length; i++) { if (contacts[i].resourceName === resourceName) { return contacts[i]; } } return null; } // 删除指定resourceName的联系人 function deleteContactPerson(resourceName) { // API需要两个参数:当前用户标识(people/me)和要删除的联系人resourceName People.People.Connections.deleteContact('people/me', resourceName); }
关键修正说明
- 修复搜索逻辑:
- API返回的联系人列表在
response.connections中,原代码直接遍历了响应对象而非数组 - 在
personFields中添加resourceName,确保返回的联系人对象包含该字段用于匹配
- API返回的联系人列表在
- 修正删除API调用:
deleteContact方法需要传入两个参数:'people/me'(当前用户)和目标联系人的resourceName,原代码仅传入了一个参数
- 优化用户交互:
- 改为读取当前选中单元格的内容,支持选择任意行的resourceName,符合需求中的“选择特定resourceName”
- 增加空值判断,避免无效操作
- 修正函数名拼写:将调用的
deleteContactPersoon改为正确的deleteContactPerson
内容的提问来源于stack exchange,提问作者M. Atou
相关产品推荐
相关产品推荐

