2017-07-10 89 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()調用。它不會在這個劇本中做出這麼大的一筆交易,但是將來還有待考慮。

相關問題