2016-10-27 68 views
0

我已經通過論壇搜索幾次,我沒能回答出蘇斯我的問題。類型錯誤:無法讀取屬性的「源」從不確定

我使用谷歌表來跟蹤我的團隊項目進度。我目前有5個用戶,每個用戶都有自己的選項卡,另外還有三個額外的選項卡,這些選項卡旨在爲除我自身以外的任何用戶提供動態響應。

爲了使這個跟蹤器好用,我實現了一個onEdit腳本移動這是一個從用戶的選項卡上的「完成」選項卡中自動標記「已完成」的任何項目。

腳本工作得很好我測試了它的最初幾次,但我現在遇到這個錯誤:

TypeError: Cannot read property "source" from undefined. (line 7)

我不完全知道爲什麼腳本無法找到來源,因此我不確定我需要在代碼中修復哪些內容。

function onEdit(event) { 
    // assumes source data in sheets named Laura, Jedsen, Erin, Tim, Hunter 
    // target sheet of move to named Completed 
    // test column with completed is col 11 or K 
    // must create new script when adding in a new writer 
    var ss = SpreadsheetApp.getActiveSheet(); 
    var s = event.source.getActiveSheet(); 
    var r = event.source.getActiveRange(); 

    if(s.getName() == "Laura" && r.getColumn() == 11 && r.getValue() == "Completed") { 
    var row = r.getRow(); 
    var numColumns = s.getLastColumn(); 
    var targetSheet = ss.getSheetByName("Completed"); 
    var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1); 
    s.getRange(row, 1, 1, numColumns).moveTo(target); 
    s.deleteRow(row); 
    } 
    if(s.getName() == "Jedsen" && r.getColumn() == 11 && r.getValue() == "Completed") { 
    var row = r.getRow(); 
    var numColumns = s.getLastColumn(); 
    var targetSheet = ss.getSheetByName("Completed"); 
    var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1); 
    s.getRange(row, 1, 1, numColumns).moveTo(target); 
    s.deleteRow(row); 
    } 
    if(s.getName() == "Erin" && r.getColumn() == 11 && r.getValue() == "Completed") { 
    var row = r.getRow(); 
    var numColumns = s.getLastColumn(); 
    var targetSheet = ss.getSheetByName("Completed"); 
    var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1); 
    s.getRange(row, 1, 1, numColumns).moveTo(target); 
    s.deleteRow(row); 
    } 
    if(s.getName() == "Hunter" && r.getColumn() == 11 && r.getValue() == "Completed") { 
    var row = r.getRow(); 
    var numColumns = s.getLastColumn(); 
    var targetSheet = ss.getSheetByName("Completed"); 
    var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1); 
    s.getRange(row, 1, 1, numColumns).moveTo(target); 
    s.deleteRow(row); 
    } 
    if(s.getName() == "Tim" && r.getColumn() == 11 && r.getValue() == "Completed") { 
    var row = r.getRow(); 
    var numColumns = s.getLastColumn(); 
    var targetSheet = ss.getSheetByName("Completed"); 
    var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1); 
    s.getRange(row, 1, 1, numColumns).moveTo(target); 
    s.deleteRow(row); 
    } 
} 

回答

1

看起來您正在腳本編輯器中運行該功能。在這種情況下,event未定義。要了解如何測試觸發功能看How can I test a trigger function in GAS?

+0

謝謝魯本!看起來我的腳本現在運行得很好。 –

+0

@LauraMantzoros:謝謝你讓我知道。如果您發現自己如何修復腳本,請將您的解決方案作爲答案發布。 –

0

我認爲這會爲你工作,

var ss = SpreadsheetApp.getActiveSheet(); 
var s = ss.getActiveSheet(); 
var r = s.getActiveRange(); 

讓我知道,如果工作或沒有。

相關問題