【发布时间】:2021-05-24 05:54:24
【问题描述】:
我对编码很陌生,只是想从 Google 表格开始学习一些东西。我有一个仅在一张纸上运行的示例脚本,它将被共享电子表格。这是我的脚本
<!-- begin snippet: js hide: false console: true babel: false -->
var sheet =`enter code here` ["Main01"];
var optionList = ["Options"];
var ws = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheet);
var wsOptions = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(optionList);
var options = wsOptions.getRange(2,1,wsOptions.getLastRow()-1,3).getValues();
var firstLevelColumn = 1;
var secondLevelColumn = 2;
var thirdLevelColumn = 3;
//Begins - main functions
function myFunction() {
} //End of myFunction
function onEdit(e) {
var activeCell = e.range;
var val = activeCell.getValue();
var r = activeCell.getRow();
var c = activeCell.getColumn();
var wsName = activeCell.getSheet().getName();
if(wsName == sheet && c == firstLevelColumn && r > 1 ){
firstLevelList(val,r);
} else if (wsName == sheet && c == secondLevelColumn && r > 1 ) {
secondLevelList (val,r);
}
} //End of function - onEdit
function firstLevelList(val,r) {
if(val == ""){
ws.getRange(r,secondLevelColumn).clearContent();
ws.getRange(r,secondLevelColumn).clearDataValidations();
ws.getRange(r,thirdLevelColumn).clearContent();
ws.getRange(r,thirdLevelColumn).clearDataValidations();
} //End of inner if statement
else {
ws.getRange(r,secondLevelColumn).clearContent();
ws.getRange(r,thirdLevelColumn).clearContent();
ws.getRange(r,thirdLevelColumn).clearDataValidations();
var filteredOptions = options.filter(function(op) { return op[0] == val });
var applyList = filteredOptions.map(function(op) { return op[1] });
var cell = ws.getRange(r,secondLevelColumn);
applyCellValidation(applyList,cell);
} //End of else statement
} //End of function - firstLevelList
function secondLevelList(val,r) {
//similar to firstLevelList with next level validation
} //End of function - secondLevelList
function applyCellValidation(list,cell) {
var rule = SpreadsheetApp.newDataValidation().requireValueInList(list).setAllowInvalid(false).build();
cell.setDataValidation(rule);
} //End of function - CellValidation
我想从代码中实现的一些任务-
- 打开电子表格时自动运行脚本 - 可能使用 onOpen() 触发器。怎么不知道
- 由于它将是共享电子表格,因此我希望在任何用户访问时为每个活动工作表运行脚本。
【问题讨论】:
-
当您打开电子表格时 - 活动工作表将始终是第一个工作表(
Sheet1- 如果未重命名)。这意味着检测活动工作表onOpen的脚本将始终检测电子表格的第一张工作表。是你想要的吗?如果您希望脚本在用户手动更改活动工作表后再次运行 - 这不会发生onOpen。此外,目前您的脚本已设置为onEdit- 您想保持此功能(脚本应同时运行onOpen和onEdit)还是只运行onOpen? -
@ziganotschka 我想让它工作,只要用户打开和编辑任何工作表选项卡。脚本以类似方式适用于电子表格的所有工作表选项卡。谢谢
-
在这种情况下,您需要(除了您的
onEdit触发器之外)一个onSelectionChange而不是onOpen触发器 - 请参阅我的答案。
标签: javascript google-apps-script google-sheets