google-apps-script - 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);
}
}
我对整个事情都很陌生,一直在四处寻找,但运气不佳。先感谢您!
解决方案
你不能寄一张纸。您只能发送工作表的链接。
如果你替换这个:
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 表格(或文本表格,为什么不呢?)并发送表格。
推荐阅读
- apache-flink - 相当于 Flink-SQL 中的“from_unixtime(bigint unixtime)”
- d3.js - 从函数内部调用 d3-tip“tip.show”时出错
- owl - 如何在 OWL / GraphDB 中推断具有 2 个以上属性的个体?
- google-bigquery - 大查询 - 日期比较
- javascript - 在播放完所有以前的动画后,我应该如何暂停 SVG 动画以保持静态图像?
- c - 为什么我们使用两个间接运算符来访问字符串数组
- xslt - XPATH/XSLT - 仅匹配具有给定属性的第一个后续祖先
- linux - 如何更改 .git 中文件的权限
- php - Yii2 GridView 显示来自多个表的数据
- css - 大量 css :悬停应用程序