在 Google Apps 脚本中按文件 ID 发送文件

Send File by File ID in Google Apps Script

我正在使用 Google Sheets 将文件名列表存储在 Google 驱动器中,它们各自的文件 ID。我在同一个工作簿中使用另一个 sheet 来记录我要发送给这些电子邮件地址的电子邮件地址和文件名。

我有一个名为 Data 的 Sheet,包含以下列

  1. 文件名 - 存储在 Google 驱动器
  2. 上的文件
  3. 文件 ID - 从共享中派生的文件的文件 ID link

我有另一个名为 Request 的 Sheet,包含以下列

  1. 文件名
  2. 电子邮件地址

我想通过从数据 sheet 中为该文件名查找相应的文件 ID 来获取作为请求 sheet 中提到的文件名提到的文件。获取文件后,我想将该文件作为附件发送到请求 sheet 中提到的电子邮件地址。我想为请求 sheet.

中的每一行执行此操作

我创建了一个名为 DocTemplate 的 HTML 文件来构成电子邮件的正文。

我在 Google Sheet 的脚本编辑器中编写了以下代码。在 运行 上,触发了一封邮件,但它不包含附件,也不包含 HTML 文件的内容。邮件正文只是 [object Object]

我做错了什么?

function sendfile(){
  
  var request = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Request");
  var data = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Data");
  
  var Avals = request.getRange("A1:A").getValues();
  var requestlastrow = Avals.filter(String).length;
  var Avalsu = data.getRange("A1:A").getValues();
  var datalastrow = Avalsu.filter(String).length;
  
  
  for (var i=2;i<= requestlastrow;i++) {

    var control = request.getRange(i,6).getValue();
    
    if(control != 1){
      
      
      var FilenameRequest = request.getRange(i,1).getValue();

      
      for (var j=2;j<= datalastrow;j++) {
      
        var FilenameData = upload.getRange(j,1).getValue();
        
        if(FilenameRequest == FilenameData) {
        
          /// to get the File ID
          var FileID = data.getRange(j,2).getValue();
          var file = DriveApp.getFileById(FileID);
          
  
          
          /// to form the email
          var values = request.getRange(i,1,1,2).getValues();
          var rec = values[0];
          var client = 
              {
                email: rec[1],
                name: rec[0]
              };
          
          client.subject = 'Request Filename:' + client.name;
      
          var template = HtmlService
          .createTemplateFromFile("DocTemplate.html");
          template.client = client;
          var message = template.evaluate().getContent();
  
          MailApp.sendEmail(client.email,client.subject,{
            htmlBody: message,
            attachments: [file.getAs(MimeType.PDF)]
          });
          
          request.getRange(i,6).setValue("1");
        }
      }
    }
  }
}

由于这不是一个可重现的示例,我只能假设除此之外的其余代码都有效:

MailApp.sendEmail(client.email,client.subject,{
            htmlBody: message,
            attachments: [file.getAs(MimeType.PDF)]
          });

它还应该包含消息参数:

MailApp.sendEmail(client.email,client.subject,message,{
            htmlBody: message,
            attachments: [file.getAs(MimeType.PDF)]
          });