微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Google Apps脚本错误-Google表格中有多行,但Google云端硬盘中只有一个文件-“迭代器已到达末尾” 发件人:收件人:发件人:收件人:

如何解决Google Apps脚本错误-Google表格中有多行,但Google云端硬盘中只有一个文件-“迭代器已到达末尾” 发件人:收件人:发件人:收件人:

我有一个脚本,可以从Google表格中提取字段并将其插入电子邮件模板中,然后发送电子邮件。很好。

我最近想在电子邮件中包含PDF。每封电子邮件都将使用相同的PDF。我将PDF上传到了Google云端硬盘。当我运行脚本时,第一封电子邮件会很好地发送附件,但不会发送以下电子邮件,因为我遇到此错误:“无法检索下一个对象:迭代器已到达末尾”

很确定它必须处理附件/文件,而我没有正确处理迭代。有人可以帮忙吗?下面是代码

function send2Email()
{
  var filename= 'even_overview2020.pdf';
  var file = DriveApp.getFilesByName(filename);
  
  var spread         =SpreadsheetApp.getActiveSpreadsheet();
  var contactSheet   =spread.getSheetByName(contactSheetName);
  var bodySheet      =spread.getSheetByName(templateSheetName);
  var contactData    =contactSheet.getDatarange().getValues();
  var bodyData       =bodySheet.getDatarange().getValues();
  var fname,company,sign,template,email,subject,body,sender,file;
  for (var i =1;i<contactData.length;i++)

  {
    contactData[i][statusCol-1]="";
  }
  contactSheet.getDatarange().setValues(contactData);
  for (var i =1;i<contactData.length;i++)
  {
    fname=trim_(contactData[i][fnameCol-1]);
    company=trim_(contactData[i][companyCol-1]);
    sign=trim_(contactData[i][signCol-1]);
    template=trim_(contactData[i][templateCol-1]);
    email=trim_(contactData[i][emailCol-1]);
    sender=trim_(contactData[i][senderCol-1]);
    Logger.log(email);
    for(var j=1;j<bodyData.length;j++)
    {
      if(trim_(bodyData[j][tempRefCol-1]).toupperCase()==String(template).toupperCase())
      {
        body=bodyData[j][bodyCol-1];
        subject=bodyData[j][subjectCol-1];
      }
    }
    Logger.log(j+","+email+','+body+','+subject);
    body=body.replace(/\n/g,"<br>");
    body=body.replace("(w)",sign).replace("(x)",fname).replace("(y)",company).replace("(s)",sender.split(" ")[0]);
    Logger.log(email+','+subject);

    
    MailApp.sendEmail({to:email,subject:subject,name:sender,htmlBody:body,attachments: [file.next().getAs(MimeType.PDF)]});
    contactSheet.getRange(i+1,statusCol).setValue('Y');
  }
}

解决方法

该修改如何?

修改点:

  • 在您的脚本中,循环中使用attachments: [file.next().getAs(MimeType.PDF)]}。这样,第一个循环将由file.next()工作。但是在第二次循环之后,file.next()发生了错误,因为filename的文件是Google云端硬盘中的一个文件。我认为这是您遇到问题的原因。

为了避免出现此问题,如何进行以下修改?

修改后的脚本:

发件人:

var file = DriveApp.getFilesByName(filename);

收件人:

var files = DriveApp.getFilesByName(filename);
var file;
if (files.hasNext()) {
  file = files.next().getAs(MimeType.PDF);
} else {
  throw new Error("No file");
}

而且,请进行如下修改。

发件人:

MailApp.sendEmail({to:email,subject:subject,name:sender,htmlBody:body,attachments: [file.next().getAs(MimeType.PDF)]});

收件人:

MailApp.sendEmail({to:email,attachments: [file]});

参考:

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。