问题描述
我是 Google Scripts 的新手,我从这个论坛中找到了非常有用的信息(谢谢!!)。我正在尝试创建脚本以将 Google 通讯录应用程序导出到工作表中。我能够从下面的脚本中成功获取全名和电子邮件,但它只返回“公司字段”、“电话字段”和“联系人组”。我尝试了代码的几种变体来尝试返回公司的实际名称、电话号码和组(如果已填充),但它只能返回这些标题值。对此的任何帮助都会很棒!
这是我的代码:
function getName() {
var contacts = ContactsApp.getContacts(),output = [];
var sheet = SpreadsheetApp.getActiveSheet();
// Create a header record
var header = [["Full Name","Company","Email","Phone Number","Tags"]]
var range = sheet.getRange(1,1,5);
range.setValues(header);
for(var i = 0,iLen = contacts.length; i < iLen; i++) {
//Get Full Name
var fullname = contacts[i].getFullName();
if(fullname) {
output.push([fullname])
}
SpreadsheetApp.getActiveSheet().getRange(2,output.length,1).setValues(output);
// Gets Company Name Address
var contacts = ContactsApp.getContacts(),output = [];
for(var i = 0,iLen = contacts.length; i < iLen; i++) {
var company = contacts[i].getCompanies();
if(company) {
output.push([company]);
}
} SpreadsheetApp.getActiveSheet().getRange(2,2,1).setValues(output);
// Gets Email Address
var contacts = ContactsApp.getContacts(),iLen = contacts.length; i < iLen; i++) {
var email = contacts[i].getEmailAddresses();
if(email) {
output.push([email]);
}
} SpreadsheetApp.getActiveSheet().getRange(2,3,1).setValues(output);
// Gets Phone Number
var contacts = ContactsApp.getContacts(),iLen = contacts.length; i < iLen; i++) {
var phone = contacts[i].getPhones();
if(phone) {
output.push([phone]);
}
}
SpreadsheetApp.getActiveSheet().getRange(2,4,1).setValues(output);
// Gets Tags
var contacts = ContactsApp.getContacts(),iLen = contacts.length; i < iLen; i++) {
var tags = contacts[i].getContactGroups();
if(tags) {
output.push([tags]);
}
} SpreadsheetApp.getActiveSheet().getRange(2,5,1).setValues(output);
}
解决方法
方法 getCompanies
、getPhones
、getContactGroups
返回一个对象数组。您需要访问每个元素的值。
代码:
function getName() {
var contacts = ContactsApp.getContacts();
var sheet = SpreadsheetApp.getActiveSheet();
// Create a header record
var header = [["Full Name","Company","Email","Phone Number","Tags"]]
sheet.getRange(1,1,5).setValues(header);
// Delimiter is set into next line within cell
// Change into comma if you want it delimited by comma
var delimiter = String.fromCharCode(10);
for (var i = 0,iLen = contacts.length; i < iLen; i++) {
// Get last row every loop
var row = sheet.getLastRow();
var fullname = contacts[i].getFullName();
sheet.getRange(row + 1,1).setValue(fullname);
var company = contacts[i].getCompanies(),companies = [];
for (var j in company)
if (company[j].getCompanyName())
companies.push([company[j].getCompanyName()]);
sheet.getRange(row + 1,2,1).setValue(companies.join(delimiter));
var email = contacts[i].getEmails(),emails = [];
for (var j in email)
if (email[j].getAddress())
emails.push([email[j].getAddress()]);
sheet.getRange(row + 1,3,1).setValue(emails.join(delimiter));
var phone = contacts[i].getPhones(),phones = [];
for (var j in phone)
if (phone[j].getPhoneNumber())
phones.push([phone[j].getPhoneNumber()]);
sheet.getRange(row + 1,4,1).setValue(phones.join(delimiter));
var tags = contacts[i].getContactGroups(),groups = [];
for (var j in tags)
// Default tag in my contacts seems to be "System Group: My Contacts",I did not include them
if (tags[j].getGroupName() && tags[j].getGroupName() != "System Group: My Contacts")
groups.push([tags[j].getGroupName()]);
sheet.getRange(row + 1,5,1).setValue(groups.join(delimiter));
}
}