Google apps script 如果我在不同的选项卡(工作表)上,为什么要运行此函数

Google apps script 如果我在不同的选项卡(工作表)上,为什么要运行此函数,google-apps-script,google-sheets,Google Apps Script,Google Sheets,下面的代码似乎正在运行,尽管我在另一个页面上,并已将其设置为一个条件: function setItemListProductPg(){ var tabLists = "ArquivoItens"; var tabValidation = "Painel do Produto"; var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(tabValidation); var arquivoItens =

下面的代码似乎正在运行,尽管我在另一个页面上,并已将其设置为一个条件:

function setItemListProductPg(){    
  var tabLists = "ArquivoItens";
  var tabValidation = "Painel do Produto";
  var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(tabValidation);
  var arquivoItens = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(tabLists);
  var activeCell = ss.getActiveCell();
  var itemList = arquivoItens.getRange('B2:B');

  if(ss.getSheetName() === "Painel do Produto" && activeCell.getColumn() == 3 && activeCell.getRow() == 3){

  var arrayValues = itemList.getValues();  
   // define the dropdown/validation rules
  var rangeRule = SpreadsheetApp.newDataValidation().requireValueInList(arrayValues);

   // set the dropdown validation for the row
  activeCell.setDataValidation(rangeRule); // set range to your range

  }
  }
你能告诉我失败的地方吗? 谢谢大家!

因为您没有查询活动选项卡,只查询活动电子表格 SpreadsheetApp.getActiveSpreadsheet.getSheetByNametabValidation;将始终使用tabValidation中指定的名称检索工作表,无论它是否为活动工作表

相反,您需要定义:

var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
if(ss.getSheetName() === "Painel do Produto"...){
...

我想这就是你想要的:

function setItemListProductPg(e){    
  var sh=e.range.getSheet();
  if(sh.getName()=="ArquivoItens" && e.range.columnStart==3 && e.value==3){
    var rangeRule= e.source.newDataValidation().requireValueInList(sh.getRange(2,2,sh.getLastRow()-1,1).getValues().map(function(r){return r[0];}));
    e.range.setDataValidation(rangeRule);
  }
}

当然,您需要通过“编辑/获取当前项目触发器”手动设置可安装触发器。

我假定您将此设置为从OneEdit触发器运行。每当用户编辑电子表格中的任何工作表时,都会发生On edit触发器,以便尽可能高效。在从未涉及的工作表或选项卡围绕代码发送触发器之前,您始终希望最小化任何代码。这就是您应该使用来自事件对象的信息的原因之一。我现在正在处理的主要问题之一是,在另一个页面上设置的datavalidation是在不需要的页面上设置的。但是范围是一样的。我不知道你刚才说了什么。我只是在应用上面的建议,当你的建议进来的时候。我将在一个新的数据验证上尝试这个,以了解更多信息。万分感谢!