【问题标题】:Return focus to spreadsheet将焦点返回到电子表格
【发布时间】:2020-09-04 03:46:17
【问题描述】:

我正在运行一些链接到我的 Google 电子表格上的按钮的 Google 脚本。单击按钮运行脚本后,即使仍在查看电子表格并且所选单元格仍然可见,电子表格窗口上的焦点也会丢失。我必须点击窗口才能返回焦点。

这听起来与the one asked by robodog21 非常相似。 Ed Nelson 的解决方案涉及带有执行 HTML 命令 google.script.host.editor.focus() 的按钮的侧边栏,效果很好,但我真的宁愿不涉及侧边栏。如果可能的话,我宁愿坚持使用现有的按钮。这些作为 Google 绘图插入到电子表格中,然后链接到相应的 Javascript 函数。

正如 robodog21 所指出的,我对 Javascript 和 HTML 也很陌生。我在 Google Apps 脚本中找到了以下帮助:

在 G Suite 中移动浏览器焦点

要将用户浏览器中的焦点从对话框或侧边栏切换回 Google 文档、表格或表单编辑器,只需调用方法 google.script.host.editor.focus()。此方法与文档服务方法 Document.setCursor(position) 和 Document.setSelection(range) 结合使用特别有用。

但是由于我对 HTML 的了解有限,我还没有弄清楚如何实现它。

我无法在 Stack Overflow 中找到专门与 Google Apps 脚本相关的解决方案,并且我对修改其他解决方案(例如 this)的了解还不够(还没有!)以满足我的需求。如果有人澄清如何将解决方案应用于我的情况,我将不胜感激。

【问题讨论】:

    标签: google-apps-script google-sheets


    【解决方案1】:

    在阅读了 Rubén 的回答并放弃使用侧边栏后,我一直在玩弄我的脚本并意识到将焦点返回到电子表格所需要的只是打开和关闭侧边栏。最小的 HTML 似乎是:

    <html>
      <body onload="google.script.host.close()">
      </body>
    </html>
    

    这是在 JS 函数中调用的:

    function sidebarCreator() {
      var html = HtmlService.createHtmlOutputFromFile('Page');
      SpreadsheetApp.getUi() 
          .showSidebar(html)
    }
    

    我意识到这个实现有点混乱,因为它会拉出一个我实际上并不想要的侧边栏,然后立即关闭它。然而,它完成了我想要的,不需要对我现有的按钮和功能进行其他更改,所以我很高兴。如果有人知道实现此结果的更好方法,请告诉我。感谢 Rubén 为我指明了正确的方向!

    【讨论】:

    • 如果有人对 HTML 部分感到困惑,请转到文件 > 新建 > HTML 文件,将其命名为“页面”并粘贴上面的 html 代码。
    【解决方案2】:

    以下适用于我的应用程序,但可能会或可能不会被 OP 接受:

    在范围选择之前添加类似于以下行的内容:

    Browser.msgBox("Ready to add a Venue?",Browser.Buttons.Yes)
    

    【讨论】:

      【解决方案3】:

      如果您使用电子表格上的图像/绘图来调用脚本,则无法以编程方式将焦点设置在电子表格单元格或所选内容上。

      您可以设置活动单元格或选择,但不能将焦点设置在它们上。

      answerMoving browser focus in Google Apps using Ui Service API(由 OP 引用)意味着使用 HTML 服务,因为正在使用侧边栏。

      【讨论】:

      • 我明白了——所以使用侧边栏对于该方法的成功至关重要。好吧,也许我得看看如何让侧边栏工作。谢谢!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多