我是编码的初学者,我尝试了很多东西(解决方案),但没有运行脚本 . 我正在使用现有的sendEmail脚本(见下文)将电子邮件发送到新的电子表格条目 .
https://docs.google.com/spreadsheet/ccc?key=0At8yp_w7-gFwdHdhS0RDa2hXUUMyU2lfRFJ1NU1iNEE&usp=sharing
我没有使用Google表单 . 我正在从另一个电子表格表中复制所需的信息 . 使用onEdit触发器,脚本将向新条目发送电子邮件 .
我遇到的问题是脚本会向电子表格的每一行发送一封电子邮件,即使该信息已经发送过 .
我尝试了一些解决方法,虽然它们在论坛中命名,但在我的案例中没有任何帮助 . 我不想只向最后一个条目发送电子邮件 . 我想将电子邮件发送到不同数量的新条目,如果可能的话,这应该是onEdit事件的triggert . 我希望,有人可以尽快帮助我...
var EMAIL_SENT = "EMAIL_SENT";
function sendEmails(onlyLast) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var dataSheet = ss.getSheets()[0];
var startRow = 2;
var lastRow = datasheet.getlastRow()-1;
if (onlyLast)
startRow = endRow;
var dataRange = dataSheet.getRange(startRow, 1, lastRow, 4);
var templateSheet = ss.getSheets()[1];
var emailTemplate = templateSheet.getRange("A1").getValue();
// Create one JavaScript object per row of data.
var objects = getRowsData(dataSheet, dataRange);
// For every row object, create a personalized email from a template and send
// it to the appropriate person.
for (var i = 0; i < objects.length; ++i) {
// Get a row object
var rowData = objects[i];
var file = DriveApp.getFileById('');
// Generate a personalized email.
// Given a template string, replace markers (for instance ${"First Name"}) with
// the corresponding value in a row object (for instance rowData.firstName).
var emailText = fillInTemplateFromObject(emailTemplate, rowData);
var emailSubject = "Tutorial: Simple Mail Merge";
var emailSent;
if (emailSent != EMAIL_SENT) {
var subject = "Tutorial: Simple Mail Merge";
MailApp.sendEmail(rowData.emailAddress, emailSubject, emailText, {attachments:[file.getAs(MimeType.PDF)]});
dataSheet.getRange(startRow + i, 5).setValue(EMAIL_SENT);
SpreadsheetApp.flush();
}
}
}
4 回答
以下是电子表格示例:https://docs.google.com/spreadsheets/d/1RdwZcK6tsOr1m44ZyawWsWXGa26zhd8J1ZZs_GsRRtY/edit?usp=sharing
把它放在定时触发器上:
这对我来说很有意义,它改变了Bjorn在那里所做的事情 . 脚本Bjorn的道具谢谢你,希望这个帖子可以帮助别人,就像今晚帮助我一样 . 多谢你们!
首先,我建议不使用onEdit,而是使用时间驱动的触发器来检查更改 . 这样,即使您错过了输入内容,您的脚本也不会一直尝试发送电子邮件 .
其次,您需要某种方式来指示数据处理过的天气与否 . 您可以将脚本Bold所有已处理的信息,然后通过电子邮件发送任何非粗体的内容 .
这是我为某人编写的类似脚本的链接,如果脚本看到“已取消”这个词,该脚本将通过电子邮件发送人员列表 .
https://docs.google.com/a/askbj.net/spreadsheets/d/1Y82TwZWC8Nh2HQhpKWcdxgnrU0ANo8d2JLenK3gWyY4/edit?usp=sharing
-bj
在您的代码中定义
var emailSent;
但不要为其分配任何值...所以以下比较总是返回true .
if (emailSent != EMAIL_SENT) {
尝试简单地用这个替换
var emailSent;
:它应该按预期工作 .
最后,如其他答案中所述,在计时器触发器而不是onEdit上运行此函数以避免部分电子邮件发送(如果用户更改了单元格内容或输入错误的内容......)
edit : 最后注意事项,请删除第一行
var EMAIL_SENT = "EMAIL_SENT"
,我知道它来自一个Google示例,但它知道EMAIL_SENT是变量还是值...,将条件更改为