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是在不需要的页面上设置的。但是范围是一样的。我不知道你刚才说了什么。我只是在应用上面的建议,当你的建议进来的时候。我将在一个新的数据验证上尝试这个,以了解更多信息。万分感谢!