【问题标题】:Name email attachment in Google Apps Script在 Google Apps 脚本中命名电子邮件附件
【发布时间】:2024-04-28 03:25:01
【问题描述】:

我有以下 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 文件设置名称的方法。文件名应等于“主题”变量。

提前致谢。 奥米德

【问题讨论】:

  • 试试getBlob 而不是getBytes ?
  • @tehhowch TypeError: 在对象 Blob 中找不到函数 getBlob。
  • @omid 使用它而不调用getBytes()
  • 亲爱的@Tanaike,这是一个很大的帮助和工作。检查您的答案的 cmets 以获取更多详细信息。但是,我仍然不明白那个小[0][0] 在代码中做了什么。您能否让我知道一个页面或链接以了解此[0][0] 的使用?非常感谢朋友。保重:)
  • @Tanaike BTW,我有什么办法可以通过 Telegram 而不是电子邮件将此 pdf 文件发送给特定的人!?

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


【解决方案1】:

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();

参考:

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

【讨论】:

  • 哇!伟大的!当我插入[0][0] 时,它解决了这个问题。但是,将getValues() 更改为getValue() 会导致文件名仅包含一个字符,该字符是指定变量值的第一个字符。顺便说一句,非常感谢。太棒了:)
  • 我也感谢您清晰而详细的回答,这对像我这样的新手完全有用,我可以轻松地应用它。非常感谢朋友:)
  • 顺便说一句,我有什么办法可以通过 Telegram 而不是电子邮件将此 pdf 文件发送给特定的人!?
  • 还有一个问题。随附的 pdf 文件包括大约 13 页,但只有前几页包含信息,其他页面为空白。有没有办法将 pdf 文件限制为仅包含数据的工作表部分并修剪空白页?!
  • @Omid 感谢您的回复。 [0][0] of subject[0][0] 表示getValues() 检索到的二维数组中元素的地址。在您的情况下,“U1:U1”中的值只有一个。所以地址是[0][0]。您可以在*.com/questions/966225/…查看详细信息
【解决方案2】:

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

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函数数组MailApp.sendEmail中添加Blob对象

【讨论】: