【问题标题】:Activating a sheet in Google Apps Script doesn't work在 Google Apps 脚本中激活工作表不起作用
【发布时间】:2022-11-10 05:03:15
【问题描述】:

我创建了一个 Google Apps 脚本 bound to a spreadsheet。当用户单击 Sheet1 中的特定单元格时,我试图以编程方式将活动工作表更改为 Sheet2。

从文档来看,这应该很简单;有一个名为activate() 的工作表方法。但是,通过触发器调用此函数不会更改活动工作表 - Sheet1 保持焦点。其他函数,如 hideSheet()showSheet() 立即工作,但不是 activate()

知道我可能做错了什么吗?我是否错误地使用了此功能?

编辑: 这是我正在使用的代码:

// I want to make my "Accounts" sheet the active sheet
function onSelectionChange(event) {
  const ss = SpreadsheetApp.getActiveSpreadsheet()
  const sheet = ss.getSheetByName("Accounts")
  sheet.activate()
  // I tried flushing, waiting, and trying again; still doesn't work
  SpreadsheetApp.flush()
  Utilities.sleep(2000)
  sheet.activate()
  // However, hiding or showing the sheet works immediately:
  sheet.hideSheet()
}

有趣的是,在故障排除过程中有两次,我重新打开了电子表格,并且相同的代码神秘地开始工作;但是,在 Chrome 中刷新页面时,activate() 功能再次停止工作。这就是让我怀疑这是否可能是 Apps Script 错误的原因。

【问题讨论】:

  • 我不得不为我糟糕的英语水平道歉。不幸的是,我无法从您的问题中想象您当前的脚本。我再次为我糟糕的英语水平深表歉意。为了正确理解您的问题,您能提供您当前的脚本吗?
  • 什么类型的触发器?工作表是否在浏览器中打开?
  • @Tanaike - 没问题,感谢您的帮助。我已经编辑了我的帖子以在上面添加脚本。
  • @TheMaster - 正确,此工作表已在我的浏览器中打开。当直接在代码编辑器中运行这个函数时,activate() 和 hideSheet() 函数都会成功。但是,当使用 onSelectionChange() 触发器运行此函数时,只有 hideSheet() 函数成功,而 activate() 函数失败(大多数情况下......),如上所述。
  • 我刚刚测试过,它对我有用,您是否尝试过制作电子表格的副本?

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


【解决方案1】:

这对我有用

function activateasheet() {
  const ss = SpreadsheetApp.getActive();
  ss.getSheetByName("Sheet1").activate();
  SpreadsheetApp.flush();
  Utilities.sleep(5000);
  ss.getSheetByName("Sheet2").activate()
}

【讨论】:

  • 我尝试了相同的代码(我编辑了上面的原始帖子以显示代码),不幸的是,当通过 onSelectionChange() 触发器运行时,这对我不起作用。通过该触发器运行时它对您有用吗?还是仅在从编辑器手动运行该功能时?
  • 我刚刚用 onSelectionChange 测试了代码,它对我有用,但不幸的是,这不是一个好的选择,因为脚本不断生成 onSelectionChange 触发器,用于正反馈循环并且它永远不会停止变化。
  • 是的,我不会像这样离开设置 - 我只想让代码正常工作,然后我将限制导致工作表跳到下一页的按钮范围。奇怪的是它对你有用。如果刷新页面,它仍然有效吗?
猜你喜欢
  • 2019-09-22
  • 1970-01-01
  • 2021-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多