我一直在尝试找到一种方法,将单行数据发送到我在我的域中使用的“实时/正在运行”电子表格中的特定电子邮件地址,以跟踪卡车司机及其提货号码。我设法使用表格中提供的Google Apps脚本编辑器拼凑了一小段代码:
function sendEmail()
{
var sheet = SpreadsheetApp.getActiveSheet();
var activeRow = sheet.getActiveCell().getRow();
var cellID = "H" + activeRow;
var dataRange = sheet.getRange(activeRow, 1, 1, 6);
var EMAIL_SENT = "EMAIL_SENT";
var data = dataRange.getValues();
Logger.log(data[0][0]);
var emailAddress = usercellnum@carrier.net;
var message = data;
var subject = "CG-PU#";
var emailSent = sheet.getRange(cellID).getValue();
if (emailSent != "EMAIL_SENT")
{
MailApp.sendEmail(emailAddress, subject, message);
var cell = sheet.getRange(cellID);
cell.setValue(EMAIL_SENT);
}
}
SpreadsheetApp.flush();
}
我可以通过电子表格中的单元格调用该函数,例如=sendEmail()
,它应该仅从活动行发送信息,然后将该行标记为EMAIL_SENT
,这样我就不会不小心再做了。
如果我从脚本编辑器中运行脚本并且硬编码电子邮件地址,脚本运行完美,但如果我尝试从电子表格本身运行它,我收到消息 - >错误:您无权调用sendEmail(第19行,文件“CPS_sendEmail.gs”)。
对此非常感谢!这将有助于防止我的用户运行回MS Excel和Outlook。 当我让它的这一部分工作时,我真的很喜欢它,如果我可以让函数显示用户可以选择的地址列表,或者其他一些方法让用户不必记住并输入驱动程序地址和承运人,但我很乐意让这么多工作按预期运作。
该脚本将/应该只允许我的用户在我的Google域中运行,并且我第一次执行它 - 我确信我已经完成了授权过程,但是并没有真正了解这部分内容。
他们目前正在使用MS Excel / Outlook,他们将行复制并粘贴到电子邮件中,以便他们可以使用联系人进行选择。如果我不能使用谷歌联系人的功能,我正在考虑创建一个具有查找功能或其他东西的驱动程序 - 当联系人在那里时必须保留一个列表是一种痛苦 - 但是你做了你要做的事情!
答案 0 :(得分:4)
阅读Permissions and Custom Functions。由于自定义函数(从电子表格函数调用的脚本)对电子表格的任何用户开放,因此不允许他们使用任何需要身份验证的服务。这就是你无法从一个人发送邮件的原因。
这与授权脚本访问您的服务的过程不同。这确实使错误消息混乱,但请放心,这与您调用脚本的方式有关。
没问题,因为自定义函数无论如何都是执行此类操作的不好方法,因为每次电子表格发生更改时都会重新评估该函数,发送的电子邮件数量超出了您的要求。
我建议您为此操作创建一个菜单项。 (如果您创建新的电子表格脚本,请参阅编辑器中提供的示例代码。)工作流程是将光标移动到您想要处理的行,然后使用菜单“Make It So”,这将调用您的脚本。