我正在使用onSelectionChange在選定屬性的單元和租戶選單之間導航。當您單擊右側 Unit Load Panel 上的給定單元時,它會將單元/租戶資訊加載到面板左側的表單中。

它作業正常,但通過查看執行日志,我注意到每次在整個電子表格中的任何作業表上的任何位置單擊單元格時都會觸發 onSelectionChange 觸發器。這是有道理的,因為在撰寫代碼時,每次都需要檢查單擊的單元格是否在 if 回圈中指定的范圍內。但是,這對我來說似乎效率低下且沒有必要。有沒有辦法限制 onSelectionChange 僅在特定單元格范圍內單擊單元格時觸發?
這是代碼:
function onSelectionChange(e) {
var app = SpreadsheetApp;
var activeSheet = app.getActiveSpreadsheet(); //Get current active spreadsheet
var sheet = e.source.getActiveSheet().getName(); //Gets name of sheet where cell was clicked
//row and column index of active (clicked) cell:
var range = e.range; //Activates range of clicked cell
var row = range.getRow(); //Gets row # of clicked cell
var col = range.getColumn(); // Gets col # of clicked cell
// UNIT SHEET TRIGGERS:
if(sheet == "Units"){
var sheetUnits = activeSheet.getSheetByName('Units');
//Variables for Units Load Panel (to switch between Units)
var unitsRange = sheetUnits.getRange('L7:M41'); //highlights unit number list AND tenant name list on unit form tab
var UnitID = sheetUnits.getRange('B10')// Sets Unit ID to be cell B10
var UnitIDFirstCol = sheetUnits.getRange('N7').getColumn(); //Returns 14
if( !sheetUnits.getRange(row,UnitIDFirstCol).isBlank() && col >= unitsRange.getColumn() && col <= unitsRange.getLastColumn() && row >= unitsRange.getRow() && row <= unitsRange.getLastRow()){
UnitID.setValue(sheetUnits.getRange(row,UnitIDFirstCol).getValue()); //sets UnitID at top of unit form to be unit selected
Unit_Load(); //Function that loads selected unit/tenant into form to the left
}
}
uj5u.com熱心網友回復:
您可以使用下面顯示的事件物件來限制對觸發器的回應方式:
{"authMode":"LIMITED","user":{"email":"","nickname":""},"source":{},"range":
{"columnEnd":3,"columnStart":3,"rowEnd":6,"rowStart":6}}
uj5u.com熱心網友回復:
如果您指onSelectionChange的Executions是在 Apps 腳本編輯器的部分完全不記錄,那么這似乎是不可能的,正如@Kos 所評論的那樣。
建議
但是,有一種解決方法,您可以添加到當前if條件中,以便僅在選擇特定范圍(行和列)時運行您的代碼,例如:
例如,如果您只想在選擇 A5:A10 內的單元格時運行您的代碼
if (sheet == 'Units' && row>4 && row<11 && col==1){
//run code
}else{
return; //Automatically end your script
}
這個腳本來自這個類似的答案。
uj5u.com熱心網友回復:
不可能“防止 onSelectionChange() 在每個被點擊的單元格上觸發?” 但是您可以使用JavaScript 控制陳述句來限制執行代碼的某些部分的時間。
function onSelectionChange(e){
if(e.range.rowStart === 1 && e.range.columnStart === 1){
// This part will be executed when A1 is selected
} else {
// This part will be executed when any cell but not A1 is selected
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/335324.html
上一篇:Linux-無法遞回洗掉大目錄
