我是Javascript / Coding的新手,我正试图解决问题。
我有一个程序可以将所有联系人电子邮件拉到一个数组中,然后对它们进行排序并添加新的电子邮件。拉动所有联系人需要太长时间(2000个联系人!)我想让Google Apps脚本每隔5分钟自动运行此部分,如果我想运行排序功能,我会有更新的列表。
是否可以让联系人将我的功能部分拉为自己的功能,然后使用logger.log保存值以供日后使用?单独的函数如何从这个新函数访问记录的信息?
function getEmailAddressList(){
var addrA = [];
var contact = ContactsApp.getContacts();
//////////
for(var i = 0; i < contact.length; i++){
var addresses = contact[i].getEmails();
for(var j = 0;j < addresses.length; j++){
var address = addresses[j].getAddress();
addrA.push(address);
logger.log(addrA);
};
};
答案 0 :(得分:0)
根据数据的大小,您可以将数据存储在&#34;属性服务&#34;或者&#34;缓存。&#34;属性服务每个属性名称可以容纳9k数据,总共500k。如果数据将大于该数据,那么您将需要不同的数据存储选项。例如,您可以将联系信息存储在Google云端硬盘中的文本文件中。显然,您也可以将数据保存到数据库中。关键是,您需要在某处存储联系信息。您无法将其存储在全局变量中,因为一旦代码停止运行,全局变量将丢失它的数据。 Logger.log()
在这种情况下无法帮助您。
您可以使用基于时间的触发器在一段时间间隔内运行代码。你需要在&#34; Edit&#34;中设置它。菜单和&#34;当前项目的触发器。&#34;
以下是如何将数据存储在文本文件中的示例:
function getEmailAddressList(){
var addrA,addresses,addressFile,allContacts,
contactsAsJSON,i,j,thisAddress,thisContact;
allContacts = ContactsApp.getContacts();
//////////
addrA = [];
for (i = 0; i < allContacts.length; i++) {
addresses = allContacts[i].getEmails();
for (j = 0;j < addresses.length; j++) {
thisAddress = addresses[j].getAddress();
thisContact = addresses[j].getDisplayName();
addrA.push(thisAddress);
Logger.log(thisContact);
}
}
contactsAsJSON = JSON.stringify(addrA);
try{
addressFile = DriveApp.getFileById('id');
}catch(e){}
if (!addressFile) {
addressFile = DriveApp.createFile('My Contacts', contactsAsJSON);
Logger.log('New file ID: ' + addressFile.getId());//Get the new file ID and hard code into
//the code above
}
addressFile.setContent(contactsAsJSON);
};
以下示例说明如何将所有联系人存储在缓存服务中,每个联系人都是一个属性名称:
function getEmailAddressList(){
var addresses,allContacts,Cache,i,j,thisAddress,thisContact;
Cache = CacheService.getDocumentCache();
allContacts = ContactsApp.getContacts();
//////////
for (i = 0; i < allContacts.length; i++) {
addresses = contact[i].getEmails();
for (j = 0;j < addresses.length; j++) {
thisAddress = addresses[j].getAddress();
thisContact = addresses[j].getDisplayName();
Cache.put(thisContact, thisAddress)
logger.log(thisContact);
}
}
};