我只能在一张纸上进行onEdit工作吗?

时间:2019-01-03 19:25:54

标签: google-apps-script google-sheets triggers

我正在尝试设置动态,相关的下拉数据验证列表。目的是当我从A列的列表中选择一项时,B列的下拉列表将自动更改以反映可能的选项。

即使我是编码的新手,我也设法使这部分工作在我想要的工作表上。

但是,当我在另一张纸上进行任何更改时,也会对另一张纸进行更改。我需要此脚本仅在1张纸上工作,无法弄清楚如何。

似乎人们在这里遇到了类似的问题,但是我无法根据他们的情况调整他们的解决方案。

我也尝试过用我想要更改的工作表将getActiveSheet替换为getSheetByName,但它似乎不起作用。

function onEdit() {

var activecell = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getActiveCell();
var datass = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sectors");


if(activecell.getColumn() == 3 && activecell.getRow() >1 ) {

activecell.offset(0, 1).clearContent().clearDataValidations(); 

    if(activecell.isBlank()){

 }
    var sector1 = datass.getRange(1, 1, 1, datass.getLastColumn()).getValues();  
    var sector1Index = sector1[0].indexOf(activecell.getValue()) +1 ;  


    var validationRange1 = datass.getRange(2, sector1Index, 25);   
    var validationRule1 =  SpreadsheetApp.newDataValidation().requireValueInRange(validationRange1); 

    activecell.offset(0, 1).setDataValidation(validationRule1)

    }    
}

当我在另一张纸上进行任何更改时,它也会对该另一张纸进行更改。我需要此脚本仅在1张纸上工作,无法弄清楚如何。

谢谢

1 个答案:

答案 0 :(得分:0)

不确定这是否对您有帮助,但过去我结合使用了数据验证规则和过滤器公式来获得类似的结果。我的解决方案未使用App Script,但它可能是解决问题的更简单方法。就我而言,我使用了三张单独的纸。

  • Sheet1(“ VIEW”)包含下拉选择字段和结果,
  • Sheet2(“ FILTER”)是已过滤的列数据,它响应Sheet1中的条目,并且
  • Sheet3(“ DATA”)是您要过滤的原始数据。

基本上,您正在使用Sheet1上第一个下拉列表中的输入来过滤Sheet2上的数据,并使用Sheet2上的过滤后的数据来填充下一个下拉列表的选择。

我已经链接了一个表格,该表格用示例数据演示了这个概念。

请注意“ FILTER”!A3和“ FILTER”!B3中的过滤器公式,它们是完成此工作的关键。然后,在单元格“ VIEW!A2”和“ VIEW!B2”上设置数据验证规则,以分别从范围“ FILTER”!A2:A和“ FILTER”!B2:B中进行选择。

我在每个过滤器列的顶部都包含标记为“ SHOW ALL”的静态值,这些值允许用户将该列设置为通配符。根据您的用例,这可能有用也可能没有用。

请注意,如果使用了这些值,则需要在过滤器公式中对这些值进行调节。我使用IF语句,该语句显示在相应列中找到相反变量的所有值。

很抱歉,如果这是一种过于简化(或复杂)的方法,但我希望它会有所帮助。我使用类似的配置来支持非常大的数据集,并且它们通常易于管理。

https://docs.google.com/spreadsheets/d/1GpvSVRmXLkrtr2VFZmxyZXQjLWK8nrt3DvpNc6spLDg/edit?usp=sharing