onSelectionChange 在 Google 表格中的另一个选项卡上显示所选单元格引用的值

onSelectionChange to display the value of the selected cell reference on another tab in Google Sheets

这是另一个 question 的变体,我发布了关于 onSelectionChange

这是我的 test sheet.

我的目标:如果'Sheet3'!A5:C9中的单元格被mouse/cursor选中,那么'Sheet3'!A1 = sheet 'Reference'.

中对应的单元格

例如:如果我点击A7,那么A1 = 'Reference'!A7.

这是我第一次通过脚本,但它似乎不起作用:

function onSelectionChange(e) {
  const as = e.source.getActiveSheet();
  const row = e.range.getRow();
  const col = e.range.getColumn();
  
  if( as.getSheetID() == '2006534856' ) { return; }
  
  if (row>4 && row<10 && col<4)
       {as.getRange('A1').setValue(as.getSheetName('Reference').getRange(row,col).getValue());}
  
  else 
     {as.getRange('A1').setValue(" "); }

}

问题/解释:

  • 而不是 getSheetName('Reference') 你想使用 getSheetByName('Reference').

  • as 是活动 sheet。活动 sheet 没有方法 getSheetByName。相反,您想获得点差sheet。使用事件对象来做到这一点的方法是使用 e.source。因此最终表达式将是:

    e.source.getSheetByName('Reference')

  • 如果 sheet ID 为 2006534856,此 if( as.getSheetID() == '2006534856' ) { return; } 将终止您的函数。即使您是故意这样做的,这也不是一个很好的做法。

  • 相反,检查活动 sheet 的名称是否匹配 Sheet3 并将范围条件放在同一个 if 语句中:

    if( as.getName() == 'Sheet3' && row>4 && row<10 && col<4 )

解决方案:

function onSelectionChange(e) {
  const as = e.source.getActiveSheet();
  const row = e.range.getRow();
  const col = e.range.getColumn();
  
  if( as.getName() == 'Sheet3' && row>4 && row<10 && col<4 ){
      as.getRange('A1').setValue(e.source.getSheetByName('Reference').getRange(row,col).getValue());
  }
  else{    
      as.getRange('A1').setValue('');
  }

}