如何从文件名中提取第一个字符?

时间:2016-03-16 21:52:14

标签: google-apps-script

我想通过电子邮件将同名的Google Drive文件夹中的每个文件发送给同一个人。

我有一个电子邮件列表和一个与它们相关的单词列表 - 所以

  • 'person1@mail.com'在'Unit 1'工作
  • 'person2@mail.com'在'2号楼'
  • 'person3@mail.com'在'部门ABC'
  • 等等。

请注意,单位的名称大小不同,并且不遵循模式。我在驱动器上有一个文件列表,其中包含

等名称
  • '第1单元 - FileA.pdf'
  • 'Building 2 - FilesMarch.pdf'
  • 'Building 2 - FileB.pdf'
  • 等等。

再一次,其余的文件也没有遵循模式,有些单位有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()]})
  }
  }

1 个答案:

答案 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]});
    }
  }
}