Google apps script Can';t在MailApp.sendmail中将多个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

我正在创建一个谷歌应用程序脚本,用于转换文档和发送电子邮件

我创建了两个函数,一个用于将Google文档转换为Microsoft Word,另一个用于将Google工作表转换为Microsoft Excel。这两个函数都成功返回Blob对象

我已经能够使用记录在案的MailApp.sendEmail功能发送单个blob。但当我试图在同一封电子邮件中发送两个blob时,我总是遇到无效参数错误

我的剧本是:

    //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?forma‌t=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?forma‌t=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,则相同。转换是有效的,但是我将它们发送到附件参数的方式不起作用。谢谢,詹姆斯。这很有效。我原以为返回数组是正确的,但现在我明白了。谢谢你,詹姆斯。这很有效。我原以为返回数组是正确的,但现在我明白了。感谢所花的时间。