Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 如何在图纸中指定子范围以执行SendEmail_Google Apps Script_Google Sheets - Fatal编程技术网

Google apps script 如何在图纸中指定子范围以执行SendEmail

Google apps script 如何在图纸中指定子范围以执行SendEmail,google-apps-script,google-sheets,Google Apps Script,Google Sheets,这里没有。我正在尝试使用包含许多姓名和电子邮件地址的数据库自动发送电子邮件,但我不希望一次发送数据库中的所有电子邮件,而是希望在特定时间使用唯一触发器(或脚本?)指定要发送的姓名和电子邮件的范围(例如,发送到第2-15行中的电子邮件地址),然后再发送另一个范围的电子邮件(例如,第16-30行)使用另一个唯一触发器或脚本等(这是由于电子邮件限制)。我使用的脚本设置为一次发送数据库中的所有电子邮件 function sendEmail() { var ss = SpreadsheetApp

这里没有。我正在尝试使用包含许多姓名和电子邮件地址的数据库自动发送电子邮件,但我不希望一次发送数据库中的所有电子邮件,而是希望在特定时间使用唯一触发器(或脚本?)指定要发送的姓名和电子邮件的范围(例如,发送到第2-15行中的电子邮件地址),然后再发送另一个范围的电子邮件(例如,第16-30行)使用另一个唯一触发器或脚本等(这是由于电子邮件限制)。我使用的脚本设置为一次发送数据库中的所有电子邮件

    function sendEmail() {

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

message=message.replace("<name>",name);
GmailApp.sendEmail(emailAddress, subject, message, {name:"WordProfessors"});
}


}
函数sendmail(){ var ss=SpreadsheetApp.getActiveSpreadsheet() var sheet1=ss.getSheetByName('sheet1'); var sheet2=ss.getSheetByName('sheet2'); var subject=sheet2.getRange(2,1).getValue(); var n=sheet1.getLastRow(); 对于(变量i=2;i我相信您要寻找的术语是“批处理”

实现这一点的一种方法是创建某种形式的队列。您可以向数据中添加列来表示它们的处理状态

  • 在函数中,首先按“未处理”对数据进行排序
  • 然后最多发送
    n=Math.min(sheet1.getLastRow(),10)
    10封电子邮件
  • 发送完所有电子邮件后,将所有邮件标记为“已处理”,以便在下次脚本启动时将其排序到末尾

  • 我想提醒您避免在循环中调用电子表格API函数,因为这样会降低性能。相反,您应该获取单元格的整个范围
    const range=sheet1.getRange(1,1,n,2)
    ,并在该范围内执行操作,例如获取值的2D数组:
    range.getValues()
    并循环使用它们。

    如果它们不都是连续的,您可以使用范围列表,否则只需使用范围欢迎。请按照Hi Sunny中的建议添加您的搜索/研究工作的简要说明,谢谢您的回答:我已经实现了您描述的方法,效果很好。我对您对usi的建议有一个问题使用2D数组而不是在电子表格上循环。我真的不明白如何或为什么,我想我需要对如何实现该方法进行更多的研究。这样做是否可以解释为什么我在运行函数时会出现错误:“一天内调用的服务次数太多?”这是否超过了每日配额?看起来很奇怪它发生在使用循环功能发送100封电子邮件后。您可能已超过向多个收件人发送电子邮件的报价。请参阅。我建议您使用升级帐户类型或使用多个帐户。