在特定单元格旁边添加值

时间:2013-07-24 15:33:30

标签: google-apps-script google-sheets

我想为在人力资源部门工作的朋友编写一个程序,该程序会自动向被拒绝的申请人发送拒绝信件。

为了概述该应用程序,他使用电子表格记录姓名,职位,访谈等。每个申请人在文件中都有一行。

如果他拒绝候选人,他会在特定栏目中加上“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();
        }
    }
}

2 个答案:

答案 0 :(得分:1)

最初的问题是,“DONE”值在多个位置写入,后来写入错误的行,可以通过简化代码来解决。通过相同的简化,可以避免与数据类型强制相关的问题(来自对Serge的回答的评论中的字符串与数字的东西)。

这是第一件令人困惑的事情。您似乎期望单元格E1包含一个数字,该数字将告诉您要评估的行数。

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

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

假设第一行包含电子表格的标题,并且所有后续行都包含需要处理的相关数据。唯一可能留下的数据类型强制是mailLanguagegender的比较,如果这些值的数字被强制输入为字符串,或者这些列的格式设置为'Plain文本”。

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();
        }
    }
}

答案 1 :(得分:0)

如果您使用记录器查看中间值(请参阅下面的代码中的示例),并且如果您改变了一下您的条件(即使我不知道应该是什么),这个脚本也不应该太难调试“blabla没什么重要的”; - )

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();
}

在这个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