【问题标题】:Open two urls with one click一键打开两个网址
【发布时间】:2020-06-04 19:35:36
【问题描述】:

我是 Google 表格和 Apps 脚本的新手。我有一张带有两个 URL 的表格。在单元格 F1 中是 http://testurl1.com,在单元格 G1 中是 http://testurl2.com

我想在单元格 D1 中有一个按钮或链接或其他东西,当我单击它时,它将打开这两个链接。我可以使用 Alt-Enter 手动执行此操作,但无法将其转换为代码。

我已经能够从一个菜单项打开这两个 url,但是当我尝试从一个单元格调用代码时,它说

例外:无法从此上下文中调用 SpreadsheetApp.getUi()。

但代码可以从菜单项中运行。诡异的。我目前正在尝试使用的代码如下,但我愿意接受任何建议!

function callOthers() {
  myFunction()
   Utilities.sleep(1500);
  myFunction2() 
}

function myFunction() {    
  var sheet = SpreadsheetApp.getActiveSheet();  
  var selection = sheet.getRange("F1").getValue(); 
    var html = "<script>window.open('" + selection + "');google.script.host.close();</script>";  
    var userInterface = HtmlService.createHtmlOutput(html);
  SpreadsheetApp.getUi().showModalDialog(userInterface, 'Open Tab');  
}

function myFunction2() {  
    var sheet = SpreadsheetApp.getActiveSheet();  
   var selection2 = sheet.getRange("G1").getValue(); 
   var html2 = "<script>window.open('" + selection2 + "');google.script.host.close();</script>";  
   var userInterface2 = HtmlService.createHtmlOutput(html2);  
     SpreadsheetApp.getUi().showModalDialog(userInterface2, 'Open Tab');  
}

【问题讨论】:

  • 这取决于您如何使用myFunctionmyFunction2自定义函数和普通函数是有区别的。所有函数都“存在”在脚本项目中,而不是单元格中。 getUI() 方法需要用户授权,因此不能在自定义函数的上下文中运行(这正是错误所说的)。但是您可以使用“按钮”(通过图纸/图像)或菜单项来运行它们
  • 有没有更简单的方法可以在没有代码的情况下一次打开两个链接?还是更好的编码方式?谢谢!
  • 是的,这就是所谓的用户 :) 但是,说真的,我认为这是你能做的最好的任务。即使这不是recommended 的做法,不管它看起来多么方便。用户应该对如何打开链接有发言权(ofc,这可能完全符合您的目的)
  • 感谢奥列格提供的信息!我选择了按钮选项,它正在工作。
  • 您好@OlegValter 您能否将您的评论作为答案发布,以便为了更好的文档目的而对其进行投票和接受?

标签: javascript html google-apps-script google-sheets


【解决方案1】:

问题

自定义函数在单元格中使用时被阻止运行

说明

在电子表格 UI 中提供绑定脚本函数的主要方法有以下三种:

  1. 作为自定义函数,可以像公式一样使用
  2. 作为将在单击时运行该功能的菜单项
  3. 作为通过图像或绘图创建的“按钮”,将在点击时运行功能

这三个都有不同的执行上下文和对他们可以访问和不能访问的限制,最严格的是第一个。自定义函数执行上下文绑定到调用它的单元格,因此您不能做任何影响整个 UI 的事情,getUi() 允许这样做。

此外,由于showModalDialog 是一种需要代表用户授权的方法,即使getUi() 方法可用,您也无法显示对话框,因为自定义函数从不询问用户授权访问个人数据

解决方案

如果您想与 UI 交互,您应该使用create a menubutton,如前所述。

请注意,用户必须在以下范围内授予您的脚本权限:

https://www.googleapis.com/auth/script.container.ui

参考文献

  1. 自定义函数guide
  2. showModalDialog 方法 reference
  3. getUi() 方法reference

【讨论】:

    猜你喜欢
    • 2018-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-16
    • 1970-01-01
    • 2013-07-13
    • 2011-07-05
    • 1970-01-01
    相关资源
    最近更新 更多