1

人事部で働いている友人のために、却下された応募者に自動的に辞退の手紙を送るプログラムを書きたいと思っています。

申請の概要を把握するために、彼は名前、役職、インタビューなどが記録されたスプレッドシートを使用します。申請者ごとに、ドキュメントに 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();
        }
    }
}
4

2 に答える 2

1

「DONE」値が複数の場所に書き込まれ、後で間違った行に書き込まれるという最初の問題は、コードを単純化することで解決できます。データ型の強制に関連する問題 (Serge の回答に関するコメントからの String と Number のもの) は、同じ単純化によって回避できます。

ここで、最初に混乱したと思われるものを示します。E1評価する行数を示す数値がセルに含まれていることを期待しているようです。

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

次に、を設定startRow=1し、それを使用してデータを読み取ります。の場合は、セルの内容を再度i===0設定します。何かが正しくありません。の数値ではないものを取得するか、ヘッダーを処理しようとします。この特定の関数ではそれで問題ないかもしれませんが、確実に繰り返すことができるパターンを使用するのが最善です。firstNameE1endRow

最初の行にはスプレッドシートのヘッダーが含まれており、後続のすべての行には処理が必要な関連データが含まれているとします。これらの値の数値が文字列として強制的に入力された場合、またはそれらの列の書式設定が「プレーン テキスト」に設定されている場合は、mailLanguageとの比較で唯一のデータ型の強制が残る可能性があります。gender

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();
        }
    }
}
于 2013-07-25T17:16:42.380 に答える