2013-07-24 68 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