【发布时间】:2014-03-19 20:28:45
【问题描述】:
我有一个包含这些列的操作项 Google 工作表:
- A - ID - 序列号 1、2、3 等。
- B - 已分配 - 分配操作项的日期
- C - 产品 - 项目或区域的短文本名称
- D - 操作项 - 操作项的文本描述
- E - Owner - 分配给谁的项目,这通常只是一个名称 比如 Bob L,或者有时是多人 Bob/Ted
- F - 截止日期
- G - 状态 - 待处理、处理中等
- H - 上次更新 - 由 onEdit 脚本更新
- I - 最后编辑者 - 由 onEdit 脚本更新
- J - 所有者电子邮件 - 查找数据范围以获取电子邮件地址 所有者
- K - 上次发送提醒 - 上次发送电子邮件的日期更新者 脚本
我是 GAS 的新手,所以我拼凑了 sn-ps 以使脚本为每个操作项向所有者发送 1 封电子邮件,但我想按列 E(所有者)和发送一封电子邮件。我知道我需要一个嵌套循环,但我不确定如何继续。 生成的电子邮件的格式需要是 A、B、D、F、G 列(至少)的表格。当前脚本如下:
脚本
function sendEmails() {
var sheet = SpreadsheetApp.getActiveSheet();
var startRow = 3; // First row of data to process
//var numRows = 12; // Number of rows to process *CHANGE AS NEEDED*
//var numItems = getRowsData(sheet, OpenItems);
var numItems = SpreadsheetApp.getActiveSheet().getRange("OpenItems").getValues();
var numRows = numItems[0]
// Fetch the range of cells A2:B3
var dataRange = sheet.getRange(startRow, 1, numRows, 11) // must encompass Column K (11)
// Fetch values for each row in the Range.
var data = dataRange.getValues();
for (var i = 0; i < data.length; ++i) {
var row = data[i];
var actionitemid = row[0];
var assignedon = Utilities.formatDate(new Date(row[1]), "GMT-05:00", "MM/dd/yy");
var assignedto = row[4];
var project = row[2];
var actionitem = row[3];
var duedate = Utilities.formatDate(new Date(row[5]), "GMT-05:00", "MM/dd/yy");
if (duedate == "12/31/69") { // no due date
var duedate = "TBD - please update!!" ;}
var status = row[6];
var emailAddress = row[9]; // Column J = 9 (starts at A=0
var subject = "Action Item Reminder - Project: " + project;
var sheetURL = SpreadsheetApp.getActiveSpreadsheet().getUrl();
var body = "A reminder to do the following:\n\n Project: "+project + "\n Due: "+duedate+"\nAssigned: "+assignedon+"\n Owner: "+assignedto+"\n Status: " + status + "\n\nACTION ITEM: "+actionitemid+"\n=============================\n"+actionitem+"\n=============================\n\nPlease advise if you will not meet the due date ASAP.\n\nAll action items can be found in the Action Item sheet:\n"+sheetURL+".";
var emailSent = row[11]; // Column D = 3
// if (oktosend == "Y") { // Send only for marked rows
var ok = emailAddress.length
if ( emailAddress.length > 0) {
// Send email
// MailApp.sendEmail(emailAddress, subject, body);
// MailApp.sendEmail(emailAddress, "TEST", body);
MailApp.sendEmail({
to: emailAddress,
cc: "rdeloach@rentpath.com",
subject: subject,
body: body
});
// Update EmailSent
var time = new Date();
time = Utilities.formatDate(time, "GMT-05:00", "MM/dd/yy, hh:mm");
sheet.getRange(startRow + i, 11).setValue(time); // Use column for EmailSent + 1 here getRange(startRow + i, X)
// Update oktosend to N
// sheet.getRange(startRow + i, 5).setValue('N'); // Use column for oktosend + 1 here getRange(startRow + i, X)
// Make sure the cell is updated right away in case the script is interrupted
SpreadsheetApp.flush();
} //oktosend<>N
}
}
输出/结果
主题:行动项目提醒 - 项目:Project X
提醒您执行以下操作:
项目:X 项目
截止日期:2014 年 3 月 1 日
已分配:2014 年 2 月 1 日
所有者:Rick D
状态:待定动作项目:1
~~~~~~~~~~~~~~~~~~~~~~~
提供项目 X 上新数据库表的数据需求。 ~~~~~~~~~~~~~~~~~~~~~~~~~~如果您不能尽快满足截止日期,请告知。
所有操作项都可以在操作项表中找到: 结束输出
寻求有关在 Gmail 中分组和生成表格的帮助。
【问题讨论】:
-
看看这个script on github,尤其是respondToAdd 函数,它展示了如何使用html 标记格式化电子邮件。所以你也可以使用一张桌子。
标签: email google-apps-script grouping