Google apps script Can';t在MailApp.sendmail中将多个Blob对象作为附件附加
我正在创建一个谷歌应用程序脚本,用于转换文档和发送电子邮件 我创建了两个函数,一个用于将Google文档转换为Microsoft Word,另一个用于将Google工作表转换为Microsoft Excel。这两个函数都成功返回Blob对象 我已经能够使用记录在案的MailApp.sendEmail功能发送单个blob。但当我试图在同一封电子邮件中发送两个blob时,我总是遇到无效参数错误 我的剧本是:Google apps script Can';t在MailApp.sendmail中将多个Blob对象作为附件附加,google-apps-script,Google Apps Script,我正在创建一个谷歌应用程序脚本,用于转换文档和发送电子邮件 我创建了两个函数,一个用于将Google文档转换为Microsoft Word,另一个用于将Google工作表转换为Microsoft Excel。这两个函数都成功返回Blob对象 我已经能够使用记录在案的MailApp.sendEmail功能发送单个blob。但当我试图在同一封电子邮件中发送两个blob时,我总是遇到无效参数错误 我的剧本是: //Convert Google Sheet page to Microsoft E
//Convert Google Sheet page to Microsoft Excel Document, return BLOB
function convert2Excel(docID) {
var file = DriveApp.getFileById(docID);
var url =
"https://docs.google.com/spreadsheets/d/"+docID+"/export?format=xlsx";
var token = ScriptApp.getOAuthToken();
var response = UrlFetchApp.fetch(url, {
headers: {
'Authorization': 'Bearer ' + token
}
});
var fileName = file.getName() + '.xlsx';
return [response.getBlob().setName(fileName)];
};
//Convert Google Doc page to Microsoft Word Document, return BLOB for emailing
function convert2Word(docID){
var file = DriveApp.getFileById(docID);
var url = "https://docs.google.com/document/d/"+docID+"/export?format=docx";
var token = ScriptApp.getOAuthToken();
var response = UrlFetchApp.fetch(url, {
headers: {
'Authorization': 'Bearer ' + token
}
});
var fileName = file.getName() + '.docx';
return [response.getBlob().setName(fileName)];
};
//Send email with attachments
function sendEmail(att1,att2){
MailApp.sendEmail('email@email.com', 'The Subject', 'A Message', {attachments: [att1, att2]});
};
var att1=convert2Excel('sheetID string');
var att2=convert2Word('docID string');
sendEmail(att1,att2);
根据文档,这应该可以工作,但我无法让多个blob对象工作。您的代码不使用2个附件的原因是您正在将一个数组传递给
.sendMail
的attachments
参数()
有两种方法可以让代码正常工作。行:return[response.getBlob().setName(fileName)]
通过返回方括号内的blob,实际上是返回一个包含blob的数组。您可以在调试器中看到这一点:
从返回[response.getBlob().setName(fileName)]行中删除方括号返回实际的blob。在调试器中:
或者,您可以保留方括号,将[0]
添加到att1
和att2
行的MailApp.sendmail('email@email.com“,”主题“,”邮件“,{附件:[att1,att2]});
};代码>如下:MailApp.sendmail('email@email.com“,”主题“,”邮件“,{附件:[att1[0],att2[0]});
};代码>您的代码不使用2个附件的原因是您正在将一个数组数组传递给.sendMail
()
有两种方法可以让代码正常工作。行:return[response.getBlob().setName(fileName)]
通过返回方括号内的blob,实际上是返回一个包含blob的数组。您可以在调试器中看到这一点:
从返回[response.getBlob().setName(fileName)]行中删除方括号
返回实际的blob。在调试器中:
或者,您可以保留方括号,将[0]
添加到att1
和att2
行的MailApp.sendmail('email@email.com“,”主题“,”邮件“,{附件:[att1,att2]});
};代码>如下:MailApp.sendmail('email@email.com“,”主题“,”邮件“,{附件:[att1[0],att2[0]});
};代码>您能发布一个指向您引用的文档的链接吗?我想这不是您的完整代码吗?抱歉,这是我的第一篇文章,我对脚本和本网站不熟悉。这是我在模板工作表中使用的更大脚本集的一部分。我通过将文件Id作为字符串插入来测试这一点。我不想发布具体的文档。如果将工作表文档ID字符串粘贴到convert2Excel()中,请替换email@mail.com具有有效的电子邮件地址,并且仅将att1传递给其工作的附件。如果您只通过att2,则相同。转换工作正常,但我将它们发送到attachments参数的方式不起作用。你能发布一个指向你引用的文档的链接吗?我假设这不是你的完整代码吗?抱歉,这是我的第一篇文章,我对脚本和此网站不熟悉。这是我在模板工作表中使用的更大脚本集的一部分。我通过将文件Id作为字符串插入来测试这一点。我不想发布具体的文档。如果将工作表文档ID字符串粘贴到convert2Excel()中,请替换email@mail.com具有有效的电子邮件地址,并且仅将att1传递给其工作的附件。如果您只通过att2,则相同。转换是有效的,但是我将它们发送到附件参数的方式不起作用。谢谢,詹姆斯。这很有效。我原以为返回数组是正确的,但现在我明白了。谢谢你,詹姆斯。这很有效。我原以为返回数组是正确的,但现在我明白了。感谢所花的时间。