我有一个功能需要使用我 sheet 单元格范围内的电子邮件

I have a function that needs to use emails that are within a cell range on my sheet

我有一个用于 Google 表格的函数,它根据单元格值中是否包含特定变量来发送电子邮件。以下代码的每个部分都或多或少地按预期工作,除了需要电子邮件收件人发送电子邮件的部分。我知道问题出在哪里,我只是完全没有使用代码的经验(提前抱歉)并且不知道如何解决这个问题。

错误: 异常:发送电子邮件失败:无收件人 (匿名)@ Untitled.gs:15 发送电子邮件@ Untitled.gs:5

感谢您的耐心等待。

function sendEmails() {
  const ss = SpreadsheetApp.getActive();
  const sh = ss.getSheetByName('Emails'); // change Sheet1 to the name of your sheet
  const data = sh.getRange('A2:D'+sh.getLastRow()).getValues();
  data.forEach(r=>{
     let sendemailValue = r[1];  
     if (sendemailValue === "X"){
       let lrow=sh.getLastRow();
         let name = r[0];
         let amount = r[2];
         let item = r[3];
         let emailAddress = r[4];
         let message = 'Hello ' + name + ', your receipt is ' + amount + ' for your ' + item;
         let subject = 'Your Receipt.'
         MailApp.sendEmail(emailAddress, subject, message); 
     }
  });  
}

您可能希望考虑这样的添加:

if(emailAddress) {
  MailApp.sendEmail(emailAddress, subject, message); 
} else {
  console.log(`Row: ${i + 2}`);//and add ( ,i) to the forEach
}

也改变这个:

const data = sh.getRange('A2:D'+sh.getLastRow()).getValues();

对此:

const data = sh.getRange(2, 1, sh.getLastRow()-1,5).getValues();

我增加了列数并更改了格式以确保它不会 return 底部出现一堆空值。但现在我想起来,问题可能是您正在寻找数据范围之外的电子邮件地址。

一共:

function sendEmails() {
  const ss = SpreadsheetApp.getActive();
  const sh = ss.getSheetByName('Emails'); // change Sheet1 to the name of your sheet
  const data = sh.getRange(2, 1, sh.getLastRow() - 1, 5).getValues();
  data.forEach((r,i) => {
    let sendemailValue = r[1];
    if (sendemailValue === "X") {
      let lrow = sh.getLastRow();
      let name = r[0];
      let amount = r[2];
      let item = r[3];
      let emailAddress = r[4];//this is column 5
      let message = 'Hello ' + name + ', your receipt is ' + amount + ' for your ' + item;
      let subject = 'Your Receipt.'
      if(emailAddress) {
        MailApp.sendEmail(emailAddress, subject, message);
      } else {
        console.log(`Row: ${i + 2}`);//will let you know what row it's failing on
      }
    }
  });
}