getSheetByName似乎可以获取任何活动工作表

时间:2019-05-09 02:10:01

标签: google-apps-script

我希望以下功能仅在我的“估算”标签上运行,但在所有标签上运行。我认为按名称调用工作表可以解决此问题,但事实并非如此。我是GAS的新手,几乎没有编码经验,所以我显然做错了什么。

Here is a link to my sheet

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)应从“类别”选项卡设置所有子类别(行位于相应类别之下)的数据验证。基本上可以使用,但也可以在其他所有选项卡上使用。我希望它只能在“估算”标签上使用。

1 个答案:

答案 0 :(得分:2)

使用事件对象代替活动方法

如果您的事件对象是e-> function onEdit(e){}
e.range返回修改后的范围,那么您可以使用

e.range.getSheet().getName()获取活动工作表的名称

然后您可以使用if语句,例如

if(e.range.getSheet().getName() !== 'Sheet 1') return;

在活动工作表的名称不是Sheet 1时停止脚本的执行