google-apps-script - 你能解释一下为什么我会收到这个错误:Unexpected error while getting the method or property getContacts on object ContactsApp
问题描述
这是错误:
异常:获取对象 ContactsApp 上的方法或属性 getContacts 时出现意外错误。(第 2 行,文件“ag1”)
原始问题:
代码来自这里。这是一个问题的先前答案。我不明白我怎么会在那里得到那个错误。
function getAllContacts() {
var contactsA=ContactsApp.getContacts();//The Error occurs on this line
var s='';
var br='<br />';//line delimiter change to linefeed when not using html dialog
var dlm=' ~~~ ';//field delimiter
for(var i=0;i<contactsA.length;i++) {
s+=Utilities.formatString('<br />\'%s\',\'%s\',\'%s\',\'%s\',\'%s\'%s',
(typeof(contactsA[i].getFullName())!='undefined')?contactsA[i].getFullName():'',
(typeof(contactsA[i].getAddresses().map(function (v,i,A) { return A[i].getAddress();}))!='undefined')?contactsA[i].getAddresses().map(function (v,i,A) { return A[i].getAddress();}).join(dlm):'',
(typeof(contactsA[i].getEmails().map(function(v,i,A) {return A[i].getAddress();}))!='undefined')?contactsA[i].getEmails().map(function(cV,i,A) {return A[i].getAddress();}).join(dlm):'',
(typeof(contactsA[i].getPhones().map(function(v,i,A){return A[i].getPhoneNumber();}))!='undefined')?contactsA[i].getPhones().map(function(v,i,A){return A[i].getPhoneNumber();}).join(dlm):'',
(typeof(contactsA[i].getCompanies().map(function(v,i,A){return A[i].getCompanyName();}))!='undefined')?contactsA[i].getCompanies().map(function(v,i,A){return A[i].getCompanyName();}).join(dlm):'',br);
}
var ui=HtmlService.createHtmlOutput(s).setWidth(800) ;
SpreadsheetApp.getUi().showModelessDialog(ui, 'Contacts')
}
实际上,我可以在另一个电子表格中运行代码而没有错误,但是在我一直使用 StackOverflow Questions 的电子表格中它失败了。
此功能在第 2 行也失败:
function testing101() {
const cA=ContactsApp.getContacts();
Logger.log(cA.length);
}
修复 UrlFetch 问题后:
在这个文件中仍然得到同样的错误。它仍然适用于其他文件。这是我的清单文件(减去我的库):
{
"timeZone": "America/Denver",
"dependencies": {
"enabledAdvancedServices": [{
"userSymbol": "Drive",
"serviceId": "drive",
"version": "v2"
}, {
"userSymbol": "People",
"serviceId": "peopleapi",
"version": "v1"
}, {
"userSymbol": "Slides",
"serviceId": "slides",
"version": "v1"
}, {
"userSymbol": "Gmail",
"serviceId": "gmail",
"version": "v1"
}, {
"userSymbol": "Sheets",
"serviceId": "sheets",
"version": "v4"
}, {
"userSymbol": "DriveActivity",
"serviceId": "driveactivity",
"version": "v2"
}, {
"userSymbol": "Calendar",
"serviceId": "calendar",
"version": "v3"
}],
"webapp": {
"access": "MYSELF",
"executeAs": "USER_DEPLOYING"
},
"exceptionLogging": "STACKDRIVER",
"oauthScopes": ["https://mail.google.com/", "https://www.google.com/m8/feeds", "https://www.googleapis.com/auth/userinfo.email", "https://www.googleapis.com/auth/script.external_request", "https://www.googleapis.com/auth/spreadsheets", "https://www.googleapis.com/auth/script.container.ui", "https://www.googleapis.com/auth/calendar", "https://www.googleapis.com/auth/gmail.send", "https://www.googleapis.com/auth/script.send_mail", "https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/presentations", "https://www.googleapis.com/auth/cloud-platform", "https://www.googleapis.com/auth/documents", "https://www.googleapis.com/auth/script.projects.readonly", "https://sites.google.com/feeds", "https://www.googleapis.com/auth/drive.activity"],
"runtimeVersion": "V8"
}
解决方案
您需要在 GCP 项目中启用 Contacts API。
根据您在问题跟踪器中的评论:
这是一个云平台项目。
我认为这里的问题是您尚未在 GCP 项目中启用联系人 API 。一旦你这样做,这个问题应该会消失。
因此,我认为这个问题与问题无关UrlFetch
。
更新 - 关于标准和高级服务:
@TheMaster 不只是高级服务需要在 GCP 项目中启用相应的 API;一些标准服务,包括当前的服务或DriveApp.getRootFolder()等,都需要这样做。看到这个问题:
特别是这条评论:
这里提到了为高级服务启用 API 。但不适用于标准服务,我将此通知给了文档团队。
目前尚不清楚这是否是文档的问题,该文档不仅应提及高级服务,还是与这些失败的标准服务相关的错误。
无论如何,这已在问题跟踪器内部报告,并且仍在调查中。并且可以通过在 GCP 项目中启用 Contacts API 来解决 OP 遇到的问题。