问题描述
我有一个脚本,可以从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]});