首页 > 解决方案 > Google 表格电子邮件脚本 - 根据主表格上的列值发送不同的表格选项卡

问题描述

我正在尝试编写一个脚本,允许我通过电子邮件发送一份包含 150 名员工的列表以及他们本周的个人销售数据。

目前,我有一个包含电子邮件、主题和商店编号列的主前页。每个商店编号都与具有相同名称的工作表(标签)相关,例如商店编号 5070 的 joe@gmail.com 有一个名为“5070”的标签,其中包含不断变化的数据。

我遇到的问题是引用不断变化的变量表名称。

function sendEmail() {

var ss = SpreadsheetApp.getActiveSpreadsheet()
var sheet1=ss.getSheetByName('Sheet1');
var n=sheet1.getLastRow();
for (var i = 2; i < n+1 ; i++ ) {
var emailAddress = sheet1.getRange(i,1).getValue();
var subject = sheet1.getRange(i,2).getValue();
var message = sheet1.getRange(i,3).getValue();
MailApp.sendEmail(emailAddress, subject, message);
}

}

我对整个事情都很陌生,一直在四处寻找,但运气不佳。先感谢您!

标签: google-apps-script

解决方案


你不能寄一张纸。您只能发送工作表的链接。

如果你替换这个:

var message = sheet1.getRange(i,3).getValue();

有了这个:

var sheet_name = sheet1.getRange(i,3).getValue();
var sheet      = ss.getSheetByName(sheet_name);
var message    = sheet.getUrl();

您的收件人将获得电子表格的链接(整个工作表,甚至不是特定工作表)。

要发送指向电子表格特定工作表的链接,您需要更复杂的解决方案:

var sheet_name = sheet1.getRange(i,3).getValue();
var sheet      = ss.getSheetByName(sheet_name);
var message    = getSheetUrl(sheet);

function getSheetUrl(sht) {
  // credits: https://webapps.stackexchange.com/questions/93305/

  var ss = SpreadsheetApp.getActive();
  var url = '';
  sht = sht ? sht : ss.getActiveSheet();
  url = (ss.getUrl() + '#gid=' + ss.getSheetId());
  return url;
}

但无论如何,您的所有收件人都会看到所有电子表格及其所有工作表。如果这不是您想要的,您有三个选择:

选项 1 - 制作一个新电子表格,将数据复制到其中并将链接发送到这个新电子表格。

选项 2 - 从工作表制作 PDF 并发送。实际上,您需要先执行选项 1,将新电子表格转换为 PDF,并在发送后删除新电子表格(以 PDF 格式)。

选项 3 - 从工作表的数据制作 HTML 表格(或文本表格,为什么不呢?)并发送表格。


推荐阅读