繁体   English   中英

在对话框打开时运行Google脚本

[英]Run google script on dialog open

我正在尝试创建一个脚本,该脚本将从活动单元格中获取图像的URL,打开一个对话框并显示该图像。 通过大量的搜索,反复试验和错误,我提出了下面的代码,当用户单击“读取单元格B2”按钮时,该代码在对话框中显示图像。 请在此链接中查看电子表格。

问题:如何避免使用“读取单元格B2按钮”,以便在对话框打开时自动加载图像?

IndexQ.html:

<!DOCTYPE html>
<html>
  <head> 
    <base target="_top">
  </head>
  <body>
    <script>
      function onSuccess(B2Value) {
      //document.getElementById('output').innerHTML = B2Value;
      document.getElementById('img2').src = B2Value;
      }
    </script>
<div>
    <input type="button" value="Read Cell B2" 
    onclick="google.script.run.withSuccessHandler(onSuccess).returnCellValue('B2')" />
    <br /> 
      Cell B2 contains value: <div id="output"></div> 
    <br />
    <img id="img2" src="" alt="Second Image" height="300">
    <input type="button" value="Close Sidebar" onclick="google.script.host.close()" /></div>
  </body>
</html>

和Code.gs:

function onOpen() {
 SpreadsheetApp.getUi()
  .createMenu('Sidebar').addItem('OpenDialog', 'openDialog').addItem('OpenSidebar', 'openSidebar').addToUi()
}

function returnCellValue(cell) {
 return SpreadsheetApp.getActiveSheet().getRange(cell).getValue();
}

function openDialog() {
  var html = HtmlService.createHtmlOutputFromFile('IndexQ').setSandboxMode(HtmlService.SandboxMode.IFRAME).setHeight(500);
  SpreadsheetApp.getUi().showModalDialog(html, 'Dialog title');
}

您可以使用带脚本的模板化HTML:

<img id="img2" src="<?!= returnCellValue('B2') ?>" alt="Second Image" height="300">

强制打印脚本

您需要修改打开对话框的代码:

function openDialog() {
  var html = HtmlService.createTemplateFromFile('IndexQ')
    .evaluate()
    .setSandboxMode(HtmlService.SandboxMode.IFRAME).setHeight(500);

  SpreadsheetApp.getUi().showModalDialog(html, 'Dialog title');
}

注意createTemplateFromFile()evaluate()方法。

或使用打开对话框时运行的onload函数:

  <script>
    console.log('it ran!');

    window.onload = function() {//Runs after dialog is loaded
      google.script.run.withSuccessHandler(onSuccess).returnCellValue('B2');

    };
  </script>
</html>
  1. onload解决方案正在使用window类。 当我在google脚本窗口中键入它后跟一个点时,我没有得到子类的弹出选项,所以我不知道我可以输入“ onload”。 我怎么知道window.online代码会起作用,或者我怎么知道它在那里呢?

  2. 是否可以通过window.onload: window.top.document.getElementsByClassName("script-application-sidebar")[0].styl‌​e.width='300px' "300px"执行此代码? 我共享的电子表格还有OpenSidebar子菜单,可打开侧边栏。 我放弃了这种方法,因为我无法使侧边栏足够宽以显示图像。 如果从控制台运行,则此脚本可以完成工作。 到目前为止,我还没有找到解决方案的幸运,但是现在有了这个window.onload的东西,有可能吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM