【问题标题】:Attaching Google Sheet to emails from Gmail automatically using G Script使用 G 脚本自动将 Google 表格附加到来自 Gmail 的电子邮件
【发布时间】:2019-06-17 20:24:50
【问题描述】:

我发现了一个 G 脚本,它可以根据带有名称的 excel 文件(如果需要,我可以将其转换为表格),向数百个地址发送电子邮件。

我希望能够在发送的每封电子邮件中添加附件(目前是一个 excel 文件,但可以轻松转换为表格)。每封电子邮件的附件都是相同的。

以下脚本适用于发送电子邮件,但我找不到为每封电子邮件添加附件的正确方法(注意:第 17 行是我收到错误代码的地方)。

我已经尝试了几个基于此站点上其他类似字符串的不同版本 - 但我无法让它适应我的情况,或者我可能不明白如何相应地构建语法。

/**
 * Sends emails with data from the current spreadsheet.
 */
 function sendEmails() {
var sheet = SpreadsheetApp.getActiveSheet();
var startRow = 2; // First row of data to process
var numRows = 1; // Number of rows to process
// Fetch the range of cells A2:B2
var dataRange = sheet.getRange(startRow, 1, numRows, 1);
// Fetch values for each row in the Range.
var data = dataRange.getValues();
for (i in data) {
var row = data[i];
var emailAddress = row[0]; // First column
var message = row[1]; // Second column
var subject = 'Sending emails from a Spreadsheet'
var file = Drive.Files.get('test123/xlsx');
 MailApp.sendEmail(emailAddress, subject, message, {attachments: 
  [file]});
   }
  }

ReferenceError:未定义“驱动器”。 (第 17 行,文件“代码”)

【问题讨论】:

标签: google-apps-script gmail


【解决方案1】:

“Drive”是Advanced Drive API。为了使用Drive advanced api,您需要启用该api。但是这里真的不需要高级的api。

您的文件在驱动器中吗?

如果是这样,试试这个:

var file = DriveApp.getFileById("XXXXXXXXXXX");

“xxx”应该是驱动器 ID。

【讨论】:

  • 这成功了!有点。带有附件的电子邮件。找到 ID 后,我正在寻找的正确 test123 文件。但它以 PDF 格式出现,而不是可编辑的 Excel 或 Google 表格版本(目前,在我的 Google Drive 中,它保存为 Google 表格)。在这方面有什么想法吗?
  • 如果您使用的是谷歌表格,我只需在电子邮件消息中添加“drive.google.com/open?id=”,它将“附加”任何本机驱动文件。
  • 但请确保已在电子邮件之外与他们共享。
  • 非常感谢您的帮助 J.G.当您说添加到电子邮件的消息时,您的意思是将其添加到我当前在第 13 行脚本中引用的工作表中的单元格中吗? var 消息 = 行 [1]; - 或者我是否需要以某种方式将该片段附加到脚本本身的第 13 行?我已经不安全地尝试了两种方式。我不确定如何引入实际消息(行 [1])并向其添加“drive.google.com/open?id=”。
  • var message = row[1] + " drive.google.com/open?id=XXXXX";应该管用。或者,如果您从电子表格界面与所有人共享文件,您只需添加一条消息,因为他们都会收到一封带有附件的电子邮件,完全不需要脚本。
【解决方案2】:

根据reference documentation,您要查找的类似乎是DriveApp。

/**
 * Sends emails with data from the current spreadsheet.
 */
 function sendEmails() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var startRow = 2; // First row of data to process
  var numRows = 1; // Number of rows to process
  // Fetch the range of cells A2:B2
  var dataRange = sheet.getRange(startRow, 1, numRows, 1);
  // Fetch values for each row in the Range.
  var data = dataRange.getValues();
  for (i in data) {
    var row = data[i];
    var emailAddress = row[0]; // First column
    var message = row[1]; // Second column
    var subject = 'Sending emails from a Spreadsheet';
    var file = DriveApp.getFileById('test123/xlsx');
    MailApp.sendEmail(emailAddress, subject, message, {attachments: 
  [file]});
  }
}

【讨论】:

  • 谢谢,珍。如果我想从桌面上提取 excel 文档而不是使用云端硬盘,我会使用什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多