【问题标题】:onSelectionChange for a specific Google Sheets tab特定 Google 表格标签的 onSelectionChange
【发布时间】:2020-11-07 13:01:27
【问题描述】:

这是我的test sheet

目标:每当我单击“工作表 1”中的单元格 A5:A10 时,我希望 A1 的值更改为 B5:B10。 例如:如果我点击 A7,A1 = B7。

注意:我不希望此脚本为任何其他工作表或文档运行。

您能帮我创建一个为此目的自动运行的脚本吗?

【问题讨论】:

  • 作为该项目的后续和修订:我想在工作表的另一个选项卡上引用匹配范围。因此,如果使用鼠标/光标选择了 'Sheet3'!A5:C10 中的单元格,则 'Sheet3'!A1 = 相当于选项卡 'Reference' 中的该单元格。例如,如果选择了 'Sheet3'!A7,则 'Sheet3'!A1 = 'Reference'!A7 ---- 你能帮我编写脚本吗?

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


【解决方案1】:

解释:

  • 确实,onSelectionChange(e) 触发器正是您要寻找的。​​p>

  • 您只需要利用event object 来捕获所选单元格的信息。

  • 当您单击A5:A10Sheet1 范围内的特定单元格时,以下脚本会将单元格A1 的值更新为B5:B10 的对应值。

  • 这里重要的是理解我使用的if 条件:

    if (as.getName() == 'Sheet1' && row>4 && row<11 && col==1)
    

    基本上,我只要求在Sheet1、行4 之后、行11 和列1 之前进行选择。这基本上是A5:A10 的范围。

解决办法:

function onSelectionChange(e) {
  const as = e.source.getActiveSheet();
  const row = e.range.getRow();
  const col = e.range.getColumn();
  if (as.getName() == 'Sheet1' && row>4 && row<11 && col==1){ 
        as.getRange('A1').setValue(as.getRange(row,2).getValue());
  }
}

您也可以使用offset 来获取下一列的值,而不是硬拷贝数字2

替换:

as.getRange('A1').setValue(as.getRange(row,2).getValue());

与:

as.getRange('A1').setValue(e.range.offset(0,1).getValue());

但两种方法都一样有效。

【讨论】:

    【解决方案2】:

    作为Marios 建议的替代方案,我更喜欢尽早退出(因为onSelectionChange 可以非常快速地触发,我发现它的性能更高一些)。因此,您可以将支票移到函数的顶部(其余部分仍然适用):

    function onSelectionChange({ range }) {
      const sh = range.getSheet();
      const shname = sh.getSheetName();
    
      if( shname !== "<sheet name here>" ) { return; }
    
      //continue if ok
    }
    

    1. 请注意,通常情况下,最好将工作表名称放在配置对象中(或者更好的是,放在返回配置对象的函数中)以便于维护。
    2. 此外,由于每张工作表都有一个唯一的 ID(您可以在打开的电子表格 URL 的 gid 锚点中直观地找到它,或者使用下面提到的方法以编程方式找到它),如果工作表被重命名并且使用 getSheetId 检查 id 匹配:
    function onSelectionChange({ range }) {
      const sh = range.getSheet();
      const id = sh.getSheetId();
    
      if( id !== 123456789 ) { return; }
    
      //continue if ok
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-17
      • 2021-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多