我想通过电子邮件将同名的Google Drive文件夹中的每个文件发送给同一个人。
我有一个电子邮件列表和一个与它们相关的单词列表 - 所以
请注意,单位的名称大小不同,并且不遵循模式。我在驱动器上有一个文件列表,其中包含
等名称再一次,其余的文件也没有遵循模式,有些单位有1个文件,有些单位有5个。
所以我必须将所有以'unit 1'开头的文件通过电子邮件发送给Person1 @ gmail,但我似乎无法弄清楚如何提取文件的第一个字母。下面我向您展示我是如何解决这个问题的,每个电子邮件只有一个固定名称的文件,B列上的单位名称和C栏上的电子邮件:
var ws = SpreadsheetApp.openById('ID goes here')
var sheet = ws.getSheetByName('Sheetname goes here')
var message = 'messagegoeshere'
var files = DriveApp.getFolderById('Folder ID')
for (var i = 2 ; i < 500 ; ++i) {
var name = sheet.getRange(i, 2).getValue()
var recipient = sheet.getRange(i, 3).getValue()
//some units have more than one recipient
if (sheet.getRange(i, 4).getValue() != '') {
var recipient = recipient + ', ' + sheet.getRange(i, 4).getValue()
}
var attach = files.getFilesByName(name + '.PDF')
var title = 'title'
MailApp.sendEmail(recipient, title, message, {attachments: [attach.next()]})
}
}
答案 0 :(得分:0)
您应该获取该文件夹的FileIterator:
var files = DriveApp.getFolderById('Folder ID').getFiles();
然后在while循环中迭代它
while (files.hasNext()) {
var file = files.next();
// work with the file
}
为了获得更好的性能,请不要在长循环中调用getValue
:在进入循环之前从工作表中获取所需的所有值。
要检查文件名是否以给定字符串开头,可以使用regular expression,因为Apps脚本尚不支持方便的startsWith method。这是它的样子。
function answer() {
var ws = SpreadsheetApp.openById('ID goes here')
var sheet = ws.getSheetByName('Sheetname goes here')
var data = sheet.getRange(2, 1, 500, 2).getValues(); // all we need
var files = DriveApp.getFolderById(' Id here ').getFiles();
while (files.hasNext()) {
var file = files.next();
var name = file.getName();
var recipients = []; // using an array to collect recipients
for (var i = 2; i < data.length; i++) {
var re = new RegExp('^' + data[i][0]); // check for data[i][0] at the beginning
if (re.test(name)) {
recipients.push(data[i][1]);
}
}
if (recipients.length > 0) {
MailApp.sendEmail(recipients.join(', '), 'My Subject', 'My Message', {attachments: [file]});
}
}
}