onOpen 在 AppScript 中的特定工作表上

Shi*_*il 1 google-sheets google-apps-script

我有一个onOpen执行代码,但我希望它仅在打开特定工作表时执行(例如,在打开Sheet1onOpen 函数时应该运行。)有谁知道如何实现这一点?

这就是我想要实现的目标:

  1. 打开电子表格时,检查活动工作表是否为sheet1。如果随后执行该工作表中的条件,如下所示:
onOpen()
{
    //If the active sheet is "Sheet1" then perform this:
    //Sheet Execution comes here.
}
Run Code Online (Sandbox Code Playgroud)

但上面的说法有问题:

onOpen 仅在工作表打开后进行检查。我想在每次活动工作表是“Sheet1”时检查它。例如,最初用户打开电子表格,他们登陆到“Sheet1”现在检查条件并显示输出,但是如果用户将选项卡更改为“Sheet2”然后返回“Sheet1”会怎么样。那样的话onOpen()就不会执行。我想在每次用户登陆或切换到“Sheet1”时执行检查。

现在这是另一个场景:

使用onSelectionChange

onSelectionCHange()
{
    //If the active sheet is "Sheet1" then perform this:
    //Sheet Execution comes here.
}
Run Code Online (Sandbox Code Playgroud)

现在,每次用户切换到“Sheet1”时,这都会起作用,但问题是,即使用户切换到“Sheet1”中的不同单元格onSelectionChange也会被触发,这又是不受欢迎的事情。我想要的只是在每次选项卡/工作表更改为“Sheet1”时触发该函数,而不仅仅是在打开电子表格或更改任何选择单元格时触发该函数。

soM*_*rio 5

解释:

要仅在从Sheet1打开电子表格文件时执行onOpen函数内的代码块,您可以构造以下 if 条件:

function onOpen(e) {
const as = e.source.getActiveSheet().getName();
  if (as == 'Sheet1'){
//code you want to be executed when you open the spreadsheet from Sheet1
}
}
Run Code Online (Sandbox Code Playgroud)

退税:

onOpen函数仅在打开电子表格文件执行。您不能只在工作表之间切换并期望 onOpen 起作用。


解决方案:

要在不同工作表之间切换时执行代码,您可以使用onSelectionChange(e). 以下示例在从其他工作表切换到Sheet1时设置Sheet1的单元格 A1 的值:

function onSelectionChange(e) {
  
const as = e.source.getActiveSheet();
  if (as.getName() == 'Sheet1'){ 
    as.getRange('A1').setValue("This is Sheet1");
  }
}
Run Code Online (Sandbox Code Playgroud)

这是切换到Sheet1时执行代码的通用代码模板:

  function onSelectionChange(e) {
      
    const as = e.source.getActiveSheet();
      if (as.getName() == 'Sheet1'){ 
        // put your code here
      }
    }
Run Code Online (Sandbox Code Playgroud)

参考: