2017-03-10 144 views
2

我是全新的,所以請裸露在我身邊! 我有這個代碼,用於限制所有單元格中的數據爲5個字符。我喜歡它縮短了數據恢復到5個字符,如果你在把更多的是5。谷歌應用程序腳本不能正常工作

function onEdit(e) { 
 
    var limit = 5; 
 
    if(e.value.length > limit) { 
 
    e.range.setValue(e.value.substring(0, limit)); 
 
    } 
 
}

如果我點擊運行按鈕它顯示一個錯誤。

TypeError:無法從undefined讀取屬性「value」。 (第3行,「代碼」文件) 但它似乎工作正常。

我希望腳本只能在一定範圍的單元格上工作。說C3:C100。所以我不得不參考工作表和單元格,所以將腳本改爲這個。

function onEdit(e) { 
 
var sheet = SpreadsheetApp.getActiveSheet(); 
 
var range = sheet.getRange("C3:C100"); 
 
var limit = 5; 
 
    if(e.value.length > limit) { 
 
    e.range.setValue(e.value.substring(0, limit)); 
 
} 
 
}

這個腳本不會在任何細胞的正常工作,更何況是選擇的。 任何人都可以幫助我嗎?我錯過了什麼? 謝謝

回答

1

onEdit腳本是由電子表格中的任何編輯觸發的。它在所謂的event object中「捕捉」編輯。事件對象可以作爲參數傳遞給函數。在這種情況下,你會看到onEdit(e)或onEdit(event)作爲函數名。該對象具有一些附加的參數:e.range(編輯的範圍),e.value(編輯的值),e.source(執行編輯的電子表格)等。 現在,當您運行在腳本編輯器中的功能(通過點擊播放按鈕)電子表格中沒有發生實際的編輯。因此不會創建事件對象,並且該對象的所有參數都將不確定。

如果你想「限制」腳本範圍C3的範圍:C100,您可以按如下改變腳本:

function onEdit(e) { 
var limit = 5; 
if (e.value.length > limit && e.range.rowStart > 2 && e.range.rowStart < 101 && e.range.columnStart == 3) { 
    e.range.setValue(e.value.substring(0, limit)); 
} 
} 

注意,目前該腳本將在每個標籤/張工作在您的電子表格/工作簿中。如果您想進一步限制腳本僅在一張紙上工作(例如'Sheet1'),您可以嘗試類似

function onEdit(e) { 
var limit = 5; 
if (e.source.getActiveSheet().getName() == 'Sheet1' && e.value.length > limit && e.range.rowStart > 2 && e.range.rowStart < 101 && e.range.columnStart == 3) { 
    e.range.setValue(e.value.substring(0, limit)); 
} 
} 
相關問題