我希望以下功能仅在我的“估算”标签上运行,但在所有标签上运行。我认为按名称调用工作表可以解决此问题,但事实并非如此。我是GAS的新手,几乎没有编码经验,所以我显然做错了什么。
function onEdit(){
//https://www.youtube.com/watch?v=8aOn0VMgG1w
//var ss = SpreadsheetApp.getActiveSpreadsheet();
//var estss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Estimate');
//commented out to try the var below...
//same result
var estss = SpreadsheetApp.getActive().getSheetByName('Estimate');
//var catss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Categories');
//commented out to try the var below...
//same result
var catss = SpreadsheetApp.getActive().getSheetByName('Categories');
var activeCell = estss.getActiveCell();
if(activeCell.getColumn() == 1 && activeCell.getRow() > 1){
activeCell.offset(0, 1).clearContent().clearDataValidations();
var cat = catss.getRange(1,2,1,catss.getLastColumn()).getValues();
var catIndex = cat[0].indexOf(activeCell.getValue()) + 2;
if(catIndex != 0){
var validationRange = catss.getRange(2, catIndex,catss.getLastRow());
var validationRule = SpreadsheetApp.newDataValidation().requireValueInRange(validationRange).build();
activeCell.offset(0, 1).setDataValidation(validationRule);
}
}
}
在“估计”选项卡的A列中选择类别时,接下来的列(B)应从“类别”选项卡设置所有子类别(行位于相应类别之下)的数据验证。基本上可以使用,但也可以在其他所有选项卡上使用。我希望它只能在“估算”标签上使用。
答案 0 :(得分:2)
使用事件对象代替活动方法
如果您的事件对象是e-> function onEdit(e){}
e.range返回修改后的范围,那么您可以使用
e.range.getSheet().getName()
获取活动工作表的名称
然后您可以使用if语句,例如
if(e.range.getSheet().getName() !== 'Sheet 1') return;
在活动工作表的名称不是Sheet 1
时停止脚本的执行