2017-07-10 90 views
0

我想设置一个脚本,只有当3个特定的列有一个字符串时,当第4个为“是”在其中运行的脚本。通过下面的声明,每当任何一个字段发生变化或者批准的列被更改为“是”时,它都会运行该脚本。如果当前正在编辑的行是第一行,它也不应该运行。运行功能之前可以检查多个空白吗?

function onEditIntake() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var s = SpreadsheetApp.getActiveSheet(); 
    var r = SpreadsheetApp.getActiveRange(); 
    var row = r.getRow(); 
    var approved = s.getRange(row,10).getDisplayValue(); 
    var iproject = s.getRange(row,7).getDisplayValue(); 
    var assignee = s.getRange(row,8).getDisplayValue(); 
    var deadlineDate = s.getRange(row,9).getDisplayValue(); 

    if (iproject != null && assignee != null && deadlineDate != null && row != "1" && approved != "Yes") { 

任何意见将不胜感激!

澄清:每次更改任何字段时,脚本的其余部分都会运行。我只希望它在满足所有IF条件时运行。

更新:我已将代码更改为如下所示。它现在不会在每次编辑时触发If语句。但是,只要“Yes”声明提供给已批准,它就会启动脚本,而不管其他字段是否为空,空值,“”或任何其他类型的任何变量。

function onEditIntake() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var s = SpreadsheetApp.getActiveSheet(); 
    var r = SpreadsheetApp.getActiveRange(); 
    var row = r.getRow(); 
    var approved = s.getRange(row,10).getDisplayValue(); 
    var iproject = s.getRange(row,7).getDisplayValue(); 
    var assignee = s.getRange(row,8).getDisplayValue(); 
    var deadlineDate = s.getRange(row,9).getDisplayValue(); 
    Logger.log("Approved: " + approved); 
    Logger.log("Project: " + iproject); 
    Logger.log("Deadline: " + deadlineDate); 
    Logger.log("Assignee: " + assignee); 
    if ((iproject != " ") && (assignee != " ") && (deadlineDate != " ") && (row != "1") && (approved == "Yes")) { 
+0

你在哪里检查'是'?你只是在检查'approved'是不是'null',所以它可能是'Yes'或'No'。 – Barmar

+0

什么'console.log(认为,iproject,受让人,deadlineDate);'当这种情况发生时显示? – Barmar

+0

@Barmar我对此很新,但脚本似乎不喜欢console.log。只是一些快速的谷歌搜索似乎指向需要使用记录器的谷歌脚本? –

回答

0

这应该是快了一点:

function onEditIntake() { 
    var s = SpreadsheetApp.getActiveSheet() 
    var range = s.getActiveRange(); 
    var row = range.getRow(); 
    var values = s.getRange(row, 7, 1, 4).getDisplayValues(); 

    var approved = values[0][3]; 
    var iproject = values[0][0]; 
    var assignee = values[0][1]; 
    var deadlineDate = values[0][2]; 

    if ((iproject != "") && (assignee != "") && (deadlineDate != "") && (row != 1) && (approved == "Yes")) { 
    Logger.log('should run') 
    } 
} 

注意如何有1个getDisplayValues()调用,而不是4个单独的getDisplayValue()调用。它不会在这个剧本中做出这么大的一笔交易,但是将来还有待考虑。

相关问题