在Google Apps脚本中为电子邮件附件命名

时间:2018-06-18 16:02:24

标签: email pdf google-apps-script pdf-generation attachment

我有以下G.A.S脚本将Google工作表作为pdf附件发送电子邮件。

  var spreadsheet = SpreadsheetApp.getActive();
  var subject = spreadsheet.getRange("U1:U1").getValues();
  var emailTo = spreadsheet.getRange("V1:V1").getValues();
  var message = spreadsheet.getRange("W1:W1").getValues();
  var pdf = DriveApp.getFileById(spreadsheet.getId()).getAs('application/pdf').getBytes();
  var attach = {fileName:subject,content:pdf, mimeType:'application/pdf'};
  MailApp.sendEmail(emailTo, subject, message, {attachments:[attach]});

上述代码效果很好,但附加到电子邮件的文件有一个奇怪的名称,如" [Ljava.lang.Object_@4e63998c"没有" .pdf"延期! 我正在寻找一种方法来设置pdf文件的名称,然后再附加到电子邮件。文件名应该等于"主题"变量

提前致谢。 OMID

2 个答案:

答案 0 :(得分:0)

getValues()检索的值是二维数组。我认为文件名变成了这样的字符串,因为数组用作文件名。请从数组中检索元素,然后重试。那你可以修改如下吗?

来自:

var attach = {fileName:subject,content:pdf, mimeType:'application/pdf'};

致:

var attach = {fileName:subject[0][0],content:pdf, mimeType:'application/pdf'};

您还可以使用以下修改。在这种情况下,getValue()可以从单元格中检索值作为字符串" U1"。

来自:

var subject = spreadsheet.getRange("U1:U1").getValues();

致:

var subject = spreadsheet.getRange("U1:U1").getValue();

参考:

如果这不是你想要的,请告诉我。我想考虑其他解决方案。

答案 1 :(得分:0)

我来晚了,但是解决此问题的另一种方法可能是:

var spreadsheet = SpreadsheetApp.getActive();
var subject = spreadsheet.getRange("U1:U1").getValues();
var emailTo = spreadsheet.getRange("V1:V1").getValues();
var message = spreadsheet.getRange("W1:W1").getValues();

var pdf = DriveApp.getFileById(spreadsheet.getId())
                  .getAs('application/pdf')
                  .getBlob()
                  .setName(subject);

MailApp.sendEmail(emailTo, subject, message, {attachments:[pdf]});

Blob类具有setName方法https://developers.google.com/apps-script/reference/base/blob#setName(String),可以将其链接到Blob对象(这是getBlob()的结果)

之后,您只需要在函数attachments的{​​{1}}数组中添加Blob对象