我正在使用GoogleAppsScript@google.com提供的“Contact Listings.gs”脚本的自定义版本,将Gmail联系人中的数据导入Google电子表格。 我无法导入生日。
以下是我尝试使用的代码:
function listContacts() {
var parameters = SpreadsheetApp.getActiveRange().getValues()[0];
var group = parameters.shift();
var people;
if ((group) && (group!="")) {
var contactGroup = ContactsApp.findContactGroup(group);
if (contactGroup)
people = contactGroup.getContacts();
} else
people = ContactsApp.getAllContacts();
if (!people)
return;
// grab all the contacts
var retvalues = new Array();
for (var i in people) {
var value = new Array();
value.push(people[i].getFullName());
value.push(people[i].getHomeAddress());
value.push(people[i].getPrimaryEmail());
value.push(people[i].getMobilePhone());
value.push(people[i].getHomePhone());
value.push(people[i].getDates(ContactsApp.Field.BIRTHDAY));
for (var j in parameters) {
var info = people[i]["get"+parameters[j]]();
value.push(info);
}
retvalues.push(value);
}
var r;
if ((group) || (parameters.length>0))
r = SpreadsheetApp.getActiveRange().getRowIndex()+1;
else
r = SpreadsheetApp.getActiveRange().getRowIndex();
var c = SpreadsheetApp.getActiveRange().getColumnIndex();
if (retvalues.length>0)
SpreadsheetApp.getActiveSheet().getRange(r,c,retvalues.length,retvalues[0].length).setValues(retvalues);
else
SpreadsheetApp.getActiveSheet().getRange(r,c).setValue("No contacts found.");
}
脚本使用“DateField”填充单元格,而不是可读的生日日期。
有什么想法吗?
答案 0 :(得分:1)
getDates()
方法返回一个对象数组,每个对象都有specific methods来检索日期或月份。
在您的代码中替换
行value.push(people[i].getDates(ContactsApp.Field.BIRTHDAY));
使用此代码
var dates = [];
var birthdays = people[i].getDates(ContactsApp.Field.BIRTHDAY);
for (var i in birthdays) {
dates.push(birthdays[i].getMonth()+'/'+birthdays[i].getDay());
}
value.push(dates.join(' + '));// in case there is more than 1 birthday !?!
以下评论
要以数字日期格式显示值,请在代码末尾添加以下行:
SpreadsheetApp.getActiveSheet().getRange(1,6,retvalues.length,1).setNumberFormat('d/MM/yyyy');
答案 1 :(得分:1)
我之前从未在ContactApp
玩过日期,我不得不说,这太可怕了。什么是疯狂的DateField
对象。这是我的解决方案:
function listContacts() {
var contactGroup = ContactsApp.findContactGroup('System Group: Family');
if( !contactGroup ) throw 'Group not found';
var people = contactGroup.getContacts();
var values = [['FullName','Address','Email','Mobile','Phone','Birthday']];
for( var i in people ) {
var birthday = people[i].getDates(ContactsApp.Field.BIRTHDAY);
values.push([
people[i].getFullName(),
people[i].getHomeAddress(),
people[i].getPrimaryEmail(),
people[i].getMobilePhone(),
people[i].getHomePhone(),
birthday.length ? parseDateField(birthday[0]) : '',
]);
}
var s = SpreadsheetApp.getActiveSheet();
s.getDataRange().clear();
s.getRange(1,1,values.length,values[0].length).setValues(values);
}
function parseDateField(df) {
return new Date(
df.getYear(),
{JANUARY:0,FEBRUARY:1,MARCH:2,APRIL:3,MAY:4,JUNE:5,JULY:6,
AUGUST:7,SEPTEMBER:8,OCTOBER:9,NOVEMBER:10,DECEMBER:11}[df.getMonth()],
df.getDay());
}
此解决方案的不同之处在于使用" /"分隔符并让电子表格解析它:这是不是依赖于电子表格,如果您想直接在代码中使用此日期,这可能很重要,例如: CalendarApp