2013-07-24 69 views
1

我想编写一个程序的朋友,谁是在人力资源部门工作的旁边,自动发送拒绝的信件,驳回申请。值添加特定的细胞

要让应用程序的概述,他用一个电子表格,名称,位置,访谈等记录。每个申请人在文件中都有一行。

如果他拒绝的候选人,他所说的“A”,在一个特定的列。我想让程序识别这些“A”,给申请人写一封电子邮件,然后在“A”旁边的单元格中输入“完成”一词。

的代码如下:

function Absagen() { 
    var sheet = SpreadsheetApp.getActiveSheet(); 
    var range = sheet.getRange(1, 5); 
    var endRow = range.getValue(); 
    var startRow = 1; 
    var numRows = endRow; 
    var dataRange = sheet.getRange(startRow, 1, numRows, 10) 
    var data = dataRange.getValues(); 

    for (i in data) { 
     var row = data[i]; 
     var emailAddress = row[0]; 
     var absage = row[8]; 
     var absageSent = row[9]; 
     var mailLanguage = row[3]; 
     var gender = row[7]; 
     var firstName = row[5]; 
     var lastName = row[6]; 
     Logger.log("absage = "+ absage +" ?"); 
     if (absage == "A" && absageSent != "DONE" && mailLanguage == "2" && gender == "1"){ 
      var message = "<HTML><BODY>" 
           +"blablabla"; 
      var subject = "Ihre Bewerbung"; 
      MailApp.sendEmail(emailAddress, subject, "", {htmlBody: message}); 
      var destRow = Number(startRow); ++ destRow; 
       sheet.getRange((destRow+i), 10).setValue("DONE");    
      SpreadsheetApp.flush(); 
     } 
    } 
} 

回答

1

最初的问题,即“完成”值被写入在多个地方,后来入错行,可以通过简化代码来解决。可以通过相同的简化来避免与数据类型强制相关的问题(来自对Serge的回答的评论中的字符串与数字的内容)。

这是第一件看起来令人困惑的事情。您似乎期望单元格E1包含一个数字,它会告诉您要评估多少行。

var range = sheet.getRange(1, 5); 
var endRow = range.getValue(); 

然后设置startRow=1,并用它来读取数据。当i===0时,您再次将firstName设置为单元格E1的内容。有些事情是不对的。要么你得到的东西不是endRow的数字,否则你会尝试处理你的头文件。对于这个特殊的功能来说这可能是可以的,但最好使用可靠重复的模式。

让我们假设第一行包含标题为电子表格,并且所有下列各行包含一个需要处理的相关数据。可剩下的唯一数据类型强制转换是在mailLanguagegender的比较,如果这些值的数字被强制为字符串输入,或者如果这些列的格式设置为“纯文本”。

function Absagen() { 
    var sheet = SpreadsheetApp.getActiveSheet(); 
    var headerRows = 1; // There are this many rows of header info 
    var dataRange = sheet.getDataRange(); // Range from A1 to last row & col with data 
    var data = dataRange.getValues(); // 2-dimensional array from datarange 

    // Start after header rows, process all remaining data rows 
    for (var rowNum=headerRows; rowNum < data.length; rowNum++) { 
     var row = data[rowNum]; 
     var emailAddress = row[0]; 
     var absage = row[8]; 
     var absageSent = row[9]; 
     var mailLanguage = row[3]; 
     var gender = row[7]; 
     var firstName = row[5]; 
     var lastName = row[6]; 
     Logger.log("absage = "+ absage +" ?"); 
     if (absage == "A" && absageSent != "DONE" && mailLanguage == 2 && gender == 1){ 
      var message = "<HTML><BODY>" 
           +"blablabla"; 
      var subject = "Ihre Bewerbung"; 
      MailApp.sendEmail(emailAddress, subject, "", {htmlBody: message}); 
      // Range for update is at (rowNum+1) because the _array_ starts at 0, 
      // but sheet rows start at 1. 
      sheet.getRange((rowNum+1), 10).setValue("DONE");    
      SpreadsheetApp.flush(); 
     } 
    } 
} 
+0

感谢Mogsdad,这确实是一个“有毒的礼物”,因为它应该是非常简单的,并最终导致我在手机上进行的非常长的评论交流,而没有测试任何东西的能力。 ..让我们希望你的代码将澄清一点;-),无论如何它比我的“本地修复”更'学术'^^ –

+0

家伙,非常感谢你的帮助 - 它终于有效。正如我所说,我是一个完整的初学者,我甚至没有完全建议你的代码,但只要它能够工作,我就可以完成这项工作:)。 – user2615229

+0

@ user2615229 - 添加注释以解释,我希望这可以帮助您更好地理解,并使其更易于重复使用。 – Mogsdad

0

这个脚本应该不会太辛苦,如果你使用记录,看中间值(见例如在下面的代码)进行调试,如果你改变位你的条件(即使我不知道什么是应该是“布拉布拉没什么” ;-)

Logger.log('absage = '+absage+' ?'); 
if (blaba, nothing important && absage == "A" && absageSent!='DONE'){// prevent sending multiple time and send only if "A" and if 'nothing important ! 
    var message = "<HTML><BODY>" 
         +"blablabla"; 
    var subject = "Ihre Bewerbung bei Westwing Home & Living"; 
    MailApp.sendEmail(emailAddress, subject, "", {htmlBody: message}); 
    var destRow = Number(startrow); ++ destRow; 
    sheet.getRange((destRow+i), 10).setValue("DONE"); 
    SpreadsheetApp.flush(); 
} 

Ë DIT在这个looooong系列评论之后。 正如我所说的,使用记录器可以帮助您看到会发生什么。我最终将您的代码复制到SS中进行测试,并且花了不到一分钟的时间才看到问题。 这是修改的代码和与之配合的记录器。仔细看一下,你会看到发生了什么。

... 
var destRow = Number(startRow)+Number(i); 
    Logger.log(startRow+' '+i+' '+(startRow+i)) 
    Logger.log(startRow+' '+i+' '+(Number(startRow)+Number(i))) 
sheet.getRange(Number(destRow), 10).setValue("DONE"); 
SpreadsheetApp.flush(); 
... 

enter image description here

+0

谢谢您的回答!但是'sheet.getRange(startRow + i + 1,10).setValue(“DONE”)'行仍然不起作用,就像这样,没有任何东西写在As旁边的单元格中。我也用startRow + i试了一下,没有+1,然后程序做了我所做的,但是在实际单元格下面10行,我想要的是As。 – user2615229

+0

看到编辑的代码,括号应该解决这个问题......你有11而不是2,因为1 + 1被解释为11而不是2. –

+0

仍然不起作用,与上面相同的问题:/ – user2615229