【问题标题】:Can I have onEdit work on only one sheet?我可以只在一张纸上进行 onEdit 工作吗?
【发布时间】:2019-01-03 19:25:54
【问题描述】:

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

尽管我是编码新手,但我已经设法让这部分工作在我想要的工作表上。

但是,当我在另一张纸上进行任何更改时,它也会对另一张纸进行更改。我需要这个脚本只在一张纸上工作,不知道怎么做。

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

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

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)

    }    
}

当我在另一张纸上进行任何更改时,它也会对另一张纸进行更改。我需要这个脚本只在一张纸上工作,不知道怎么做。

谢谢

【问题讨论】:

  • 看看这个answer
  • 相关1, 2, 3
  • @Cooper 谢谢你的帮助。我一直在尝试在这里整合您的其他回复,但我可能遗漏了一些东西,因为我仍然无法完成这项工作。我收到此错误:无法从未定义中读取属性“范围”
  • 我能够通过以下方式解决我的问题:'code' function onEdit() { var s = SpreadsheetApp.getActiveSheet(); if (s.getName() == 'Dealflow') {
  • 如果您在代码中使用事件对象,您可以使用 var s=e.range.getSheet();

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


【解决方案1】:

不确定这是否对您的情况有所帮助,但我过去曾结合使用数据验证规则和过滤器公式来获得类似的结果。我的解决方案不使用 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 中进行选择。

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-07
    • 1970-01-01
    • 1970-01-01
    • 2013-04-02
    • 1970-01-01
    • 1970-01-01
    • 2019-07-26
    相关资源
    最近更新 更多