2015-12-21 59 views
1

此腳本被編寫爲在公司項目日誌中使用,以幫助保持跟蹤和舊作業的歷史記錄。使用if和if的onEdit腳本時遇到問題

所有的「if」和「else if」語句都按照他們的意圖工作,除了一個小小的snafu,我似乎無法查明,我希望有一些可以看到我明顯忽略了什麼。我天翻地覆的

例子:

說我對sheetName("Parking lot")和我在列改一個名字(4),它會觸發我的「if」聲明,這就是問題所在:它應該只被解僱了「if else 「與sheetName相關聯。當我在sheetName("Waiting to be assigned")上時,我只想要發表該聲明。

我也試過在我的聲明中使用ss.getName(),這似乎沒有什麼區別。

function onEdit() { 

    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var newDate = Utilities.formatDate(new Date(), "PST", "M/d/yyyy"); 
    var nonMemberTracking = memberTracking(); 

    var currentSheet = ss.getSheetByName("Current Projects"); 
    var currentRange = currentSheet.getRange(currentSheet.getLastRow() + 1, 1); 
    var currentColumnToWatch = 15; 
    var currentActiveCell = currentSheet.getActiveCell(); 

    var currentRangez = currentSheet.getRange("A3:T"); 


    var parkinglotSheet = ss.getSheetByName("Parking lot"); 
    var parkinglotRange = parkinglotSheet.getRange(parkinglotSheet.getLastRow() + 1, 1); 
    var parkinglotColumnToWatch = 15; 
    var parkinglotActiveCell = parkinglotSheet.getActiveCell(); 

    var completedSheet = ss.getSheetByName("Completed"); 
    var completedRange = completedSheet.getRange(completedSheet.getLastRow() + 1, 1); 
    var completedColumnToWatch = completedSheet.getRange("O2:O").getValue(); 
    var completedActiveCell = completedSheet.getActiveCell(); 

    var waitingSheet = ss.getSheetByName("Waiting to be assigned"); 
    var waitingColumnToWatch = 4; 
    var waitingActiveCell = waitingSheet.getActiveCell(); 
    var waitingRange = waitingSheet.getRange(waitingSheet.getLastRow() + 1, 1); 

    currentRangez.sort([{ column : 4, ascending: true},{ column : 11, ascending: true}]) 

    if(waitingActiveCell.getColumn() == waitingColumnToWatch && waitingActiveCell.getValue() !== ""){ 


    currentSheet.insertRowAfter(currentSheet.getLastRow()); 
    waitingSheet.getRange(waitingActiveCell.getRow(), 9, 1).setValue("YES"); 
    waitingSheet.getRange(waitingActiveCell.getRow(), 1, 1, waitingSheet.getLastColumn()).moveTo(currentRange); 
    waitingSheet.deleteRow(waitingActiveCell.getRow()); 
    currentSheet.sort(4); 


    } else if(currentActiveCell.getColumn() == currentColumnToWatch && currentActiveCell.getValue() == "Parking lot"){ 

    parkinglotSheet.insertRowAfter(parkinglotSheet.getLastRow()); 
    currentSheet.getRange(currentActiveCell.getRow(), 1, 1, currentSheet.getLastColumn()).moveTo(parkinglotRange); 
    currentSheet.deleteRow(currentActiveCell.getRow()); 
    parkinglotSheet.sort(4); 

    } else if(currentActiveCell.getColumn() == currentColumnToWatch && currentActiveCell.getValue() == "Complete"){ 

    completedSheet.insertRowAfter(completedSheet.getLastRow()); 
    currentSheet.getRange(currentActiveCell.getRow(), 1, 1, currentSheet.getLastColumn()).moveTo(completedRange); 
    currentSheet.deleteRow(currentActiveCell.getRow()); 
    completedSheet.sort(4); 
    nonMemberTracking; 

    } else if(parkinglotActiveCell.getColumn() == parkinglotColumnToWatch && parkinglotActiveCell.getValue() !== "Parking lot"){ 

    currentSheet.insertRowAfter(currentSheet.getLastRow()); 
    parkinglotSheet.getRange(parkinglotActiveCell.getRow(), 1, 1, parkinglotSheet.getLastColumn()).moveTo(currentRange); 
    parkinglotSheet.deleteRow(parkinglotActiveCell.getRow()); 
    currentSheet.sort(4); 

    }} 

回答

2

你可能嘗試做這樣的事情:

function onEdit(e) { 
    if (SpreadsheetApp.getActiveSheet().getName() == "Waiting to be assigned") { 
    // Wall of text 
    } 
} 

這裏的問題是,你有電子表格,而不是工作表的名稱。

稍微更優雅的解決方案是使用e參數。
e是一個事件對象,其中包含有關激活觸發器的事件的各種信息。
所以,你的功能應該是這樣的:

function onEdit(e) { 
    if (e.range.getSheet().getName() == "Waiting to be assigned") { 
    // Wall of text 
    } 
} 

顯然與範圍,您還可以檢查它是否真的柱4已編輯。

+0

謝謝,我會試試看。 –

+0

這工作完美,再次感謝。 –

0

我同意@ robin-gertenbach,另外你也會這樣做。

  • 選擇資源 - >當前項目的觸發器。 - >點擊鏈接立即添加 。
  • 在運行下,選擇您想要由 觸發器執行的功能。 (在你的情況「onEdit(e)」)
  • 在事件下,選擇從
  • 在事件下,選擇從電子表格。
  • 從下一個下拉列表中選擇On On編輯。點擊保存。

玩得開心!