如何获取“名称包含电子表格中单元格D1:D中的信息”的Google云端硬盘PDF文件,并将其作为电子邮件发送给A列中的每个联系人

免责声明:我是编程新手,请耐心:)

我正在尝试将带有PDF文件附件的电子邮件发送到Google电子表格上的其他电子邮件联系人。通过在Google驱动器上查找该文件名,每个附件对于每个名称都必须是唯一的。有人可以帮忙这些额外的代码吗?

我目前拥有的代码正在发送带有自定义消息和文件附件的电子邮件,并在脚本结束运行后将每封电子邮件标记为C列中发送的电子邮件。但是,我想向每个电子邮件地址发送不同的PDF附件,最好是编写一些代码以获取D列中的“投资者名称”,在Google云端硬盘中查找包含该名称的文件,并附加该文件到要发送的电子邮件。

因此,我需要通过每个相应单元格中的每个名称来获取PDF文件,而不是如下所示(我相信):

var file = DriveApp.getFilesByName('SHARE CERTIFICATE#60-JOHN APPLE.pdf');

// This constant is written in column C for rows for which an email
// has been sent successfully.
var EMAIL_SENT = "EMAIL_SENT";

function sendEmails2() {
  var sheet = Spreadsheetapp.getactiveSheet();
  var startRow = 2;  // First row of data to process
  var numRows = 250;   // Number of rows to process
  // Fetch the range of cells A2:B3
  var dataRange = sheet.getRange(startRow,1,numRows,250)
  // Fetch values for each row in the Range.
  var data = dataRange.getvalues();
  for (var i = 0; i < data.length; ++i) {
    var row = data[i];
    var emailaddress = row[0];  // First column
    var message = row[1];       // Second column
    var emailSent = row[2];     // Third column
    if (emailSent != EMAIL_SENT) {  // Prevents sending duplicates
      var subject = "Sending emails from a Spreadsheet";
      var file = DriveApp.getFilesByName('SHARE CERTIFICATE #60 - JOHN APPLE.pdf');
  if (file.hasnext()) {
    MailApp.sendEmail(emailaddress,subject,message,{
    attachments: [file.next().getas(MimeType.PDF)],name: 'Custom email Team'
 });
      sheet.getRange(startRow + i,3).setvalue(EMAIL_SENT);
      // Make sure the cell is updated right away in case the script is interrupted
      Spreadsheetapp.flush();
    }
  }
}
}

我期望的最终结果是: -将带有消息和主题的电子邮件发送到不同的电子邮件地址 -附加一个PDF文件,其文件名与每个电子邮件收件人的姓名

非常感谢,这将极大地帮助您! :)

yzhwyf 回答:如何获取“名称包含电子表格中单元格D1:D中的信息”的Google云端硬盘PDF文件,并将其作为电子邮件发送给A列中的每个联系人

我认为这样的事情会起作用:

function sendEmails() {
  var ss=SpreadsheetApp.getActive();
  var sheet=ss.getActiveSheet();
  var logsheet=ss.getSheetByName('logSheet');//added logsheet
  if(!logsheet){ss.insertSheet('logSheet');}
  var startRow=3;//added one row here to accomodate subject and pdfFldrId  
  var dataRange = sheet.getRange(startRow,1,sheet.getLastRow()-startRow-1,sheet.getLastColumn())
  var data = dataRange.getValues();
  var subject= sheet.getRange("B2").getValue();
  var pdfFldrId=sheet.getRange("C2").getValue();
  for (var i=0;i<data.length;++i) {
    var row=data[i];
    var emailAddress=row[0];  
    var message=row[1];       
    var emailSent=row[2];     
    var pdfName=row[3];        
    var files=DriveApp.getFolderById(pdfFldrId).getFilesByName(pdfName);
    var n=0;
    while(files.hasNext()) {
      var file=files.next();
      n++;
    }
    if(n>1){
      var ts=Utilities.formatDate(new Date(),Session.getScriptTimeZone(),"MM/dd/yyyy HH:mm:ss");
      logsheet.append([ts,pdfName,'more than file with this name']);
      continue;//breaks out of loop increment index and keep going
    }
    if(emailSent!="EMAIL_SENT") {

    MailApp.sendEmail(emailAddress,subject,message,{attachments:[file]});
      sheet.getRange(startRow + i,3).setValue("EMAIL_SENT");
    }
  }
}

如果要发送具有相同电子邮件列表的其他图像,只需复制工作表并更改C2和B2中找到的pdfFldrId和主题,并学会保留不同的图像是具有相同文件名的不同文件夹。 / p>

,

您的代码缺少一个小细节。基本上,使用getRange时,您应该从D列获取数据:

var numRows = sheet.getLastRow() - startRow + 1; // Number of rows to process
var startCol = 1;
var numCols = 4; // Number of columns to process (should include column D)
// Fetch the range of cells A2:D
var dataRange = sheet.getRange(startRow,startCol,numRows,numCols);

请注意,不必对要检索的行数进行硬编码。如果使用getLastRow,则可以获取包含内容的最后一行的索引,并使用该索引来获取所需的范围。这样,您就可以准确地获得所需的行数。不多不少。

然后,在循环内部,检索D列中的值,如下所示:

var fileName = row[3];      // Fourth column

最后,您像这样从云端硬盘检索文件:

var files = DriveApp.getFilesByName(fileName);

所以完整的修改后的代码可能像这样:

// This constant is written in column C for rows for which an email
// has been sent successfully.
var EMAIL_SENT = "EMAIL_SENT";

function sendEmails2() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var startRow = 2;  // First row of data to process
  var numRows = sheet.getLastRow() - startRow + 1; // Number of rows to process
  var startCol = 1;
  var numCols = 4; // Number of columns to process (should include column D)
  // Fetch the range of cells A2:D
  var dataRange = sheet.getRange(startRow,numCols);
  // Fetch values for each row in the Range.
  var data = dataRange.getValues();
  for (var i = 0; i < data.length; i++) {
    var row = data[i];
    var emailAddress = row[0];  // First column
    var message = row[1];       // Second column
    var emailSent = row[2];     // Third column
    var fileName = row[3];      // Fourth column
    if (emailSent != EMAIL_SENT) {  // Prevents sending duplicates
      var subject = "Sending emails from a Spreadsheet";
      var files = DriveApp.getFilesByName(fileName);
      if (files.hasNext()) {
        var file = files.next();
        MailApp.sendEmail(emailAddress,{
          attachments: [file],// No need to use getAs if your file is already a PDF
          name: 'Custom email Team'
        });
        sheet.getRange(startRow + i,3).setValue(EMAIL_SENT);
        // Make sure the cell is updated right away in case the script is interrupted
        SpreadsheetApp.flush();
      }
    }
  }
}

我对该代码做了一些其他小的更改(例如,将变量file更改为files,然后定义var file = files.next())。

我希望这对您有帮助。

本文链接:https://www.f2er.com/3136486.html

大家都在问