Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/380.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.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
Javascript Sendemail函数:要处理的行数_Javascript_Google Apps Script_Google Sheets - Fatal编程技术网

Javascript Sendemail函数:要处理的行数

Javascript Sendemail函数:要处理的行数,javascript,google-apps-script,google-sheets,Javascript,Google Apps Script,Google Sheets,我有一个发送电子邮件的功能,它与我的谷歌工作表完美配合 但是,我必须在代码中写入要处理的行数。有没有办法只处理已填充的行 这是我的密码: var EMAIL_SENT='EMAIL SENT'; 函数sendEmails(){ var sheet=SpreadsheetApp.getActiveSheet(); var startRow=2;//要处理的第一行数据 var numRows=4;//要处理的行数 //获取单元格的范围 var dataRange=sheet.getRange(st

我有一个发送电子邮件的功能,它与我的谷歌工作表完美配合

但是,我必须在代码中写入要处理的行数。有没有办法只处理已填充的行

这是我的密码:

var EMAIL_SENT='EMAIL SENT';
函数sendEmails(){
var sheet=SpreadsheetApp.getActiveSheet();
var startRow=2;//要处理的第一行数据
var numRows=4;//要处理的行数
//获取单元格的范围
var dataRange=sheet.getRange(startRow,1,numRows,20);
//获取范围中每行的值。
var data=dataRange.getValues();
对于(变量i=0;i
说明: 您可以使用以下命令查找包含内容的最后一行:

因为您是从第二行开始的,所以应该从
numRows
中减去
1

var dataRange = sheet.getRange(startRow, 1, numRows-1, 20);
如果有空行,则需要将其删除:

var data = data.filter(function (row) {
    return row[0] != ""; 
}); 
解决方案:
var EMAIL_SENT='EMAIL SENT';
函数sendEmails(){
var sheet=SpreadsheetApp.getActiveSheet();
var startRow=2;//要处理的第一行数据
var numRows=sheet.getLastRow();
//获取单元格的范围
var dataRange=sheet.getRange(2,1,numRows-1,20);
//获取范围中每行的值。
var data=dataRange.getValues();
var data=data.filter(函数(行){
返回行[0]!=“”;
});
对于(变量i=0;i
工作(几乎)完美。我收到一个错误,因为电子邮件地址无效。我所有的空行都有公式。对于脚本,行似乎不是空的。有什么办法可以避免这个错误吗?请尝试
var data=dataRange.getDisplayValues()而不是
var data=dataRange.getValues()@我刚试过,同样的问题。我已经看到,即使该行是空的,这里也有一个“ghost”值。请您就这个问题发布一个不同的问题。这可能是一个普遍的问题。然后,您可以共享您的工作表示例和正在使用的脚本,以便其他读者可以帮助您(包括我)@勒菲勒
var data = data.filter(function (row) {
    return row[0] != ""; 
}); 
var EMAIL_SENT = 'EMAIL SENT';
  
function sendEmails() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var startRow = 2; // First row of data to process
  var numRows = sheet.getLastRow();
  // Fetch the range of cells 
  var dataRange = sheet.getRange(2, 1,numRows-1,20);
  // Fetch values for each row in the Range.
  var data = dataRange.getValues();
  var data = data.filter(function (row) {
    return row[0] != ""; 
  });
  for (var i = 0; i < data.length; ++i) {
    var row = data[i];
    var emailAddress = row[7] + "," + row[9] + "," + row[13]; 
    var message = row[18]; 
    var emailSent = row[19]; 
    if (emailSent != EMAIL_SENT) { // Prevents sending duplicates
      var subject = 'Un nouvel adhérent vous a été affecté';
      MailApp.sendEmail(emailAddress, subject, message);
      sheet.getRange(startRow + i, 20).setValue(EMAIL_SENT);
      // Make sure the cell is updated right away in case the script is interrupted
      SpreadsheetApp.flush();
    }
  }
}