首页 文章

当脚本部署为Web应用程序时,如何在Google Spreadsheets中获得有效范围/选择?

提问于
浏览
0

我发现getActiveRange(),getActiveSelection()等函数仅在脚本作为电子表格或容器扩展中的自定义函数运行时才起作用(请参阅Execution Methods for Scripts) . 我的观察是否正确?有没有办法将脚本部署为Web应用程序,使用SpreadsheetApp.openById()打开电子表格并获取有效范围/选择,假设电子表格的所有者在 Cloud 端硬盘中打开了它?

问题是我想'm making an extension for Google Spreadsheets, but for building my custom UI I don'或UI Service,我想要传统的纯HTML / JS . 因此,我在页面上渲染我的UI,在iframe中打开电子表格,然后我的UI将Google Scripts称为服务,这意味着我将脚本部署为Web应用程序(自动执行不同的电子表格任务)并使用URL参数调用它们 . 它工作正常,除了我无法获得有效范围/选择,这是我的应用程序的交易破坏者 .

1 回答

  • 1

    好吧,我害怕你不能,因为你的观察是正确的 .

    但是,如果在主电子表格中使用第二个工作表,并且监视主工作表中的活动单元格的 onEdit() 触发器,则可能存在解决方法 . 然后外部webApp可以非常简单地轮询第二张表上的值 .

    这是电子表格中的(简单)代码:

    function onEdit(event){
      var ss = SpreadsheetApp.getActiveSpreadsheet();
      var sh = event.source.getActiveSheet();
      var r = event.source.getActiveRange();
     // if(sh.getName()!='main sheet'){return};
      ss.toast('hi = '+r.getA1Notation()+'/'+sh.getName()+'   value='+r.getValue());
      var tracker = ss.getSheetByName('tracker sheet');
      tracker.getRange(tracker.getLastRow()+1,1).setValue(r.getA1Notation());
      Browser.msgBox('new')
    }
    

    一个简单的webApp,显示如下结果:

    function doGet(){
      var targetId = '0AnqSFd3iikE3dFRqUFVMSjdiSU9EV1pGcG1hQ3FlT1E'
      var sh = SpreadsheetApp.openById(targetId).getSheetByName('tracker sheet');
      var cell = sh.getRange(sh.getLastRow(),1).getValue();
      var html ="<!DOCTYPE html><body>Active Cell in your sheet is "+cell+"</body></html>";
      return HtmlService.createHtmlOutput(html).setTitle('onEdit result')
    }
    

    一个test sheet is here(你可以写一个"main sheet",一个包含A1表示法的"tracker sheet")和附加到它的webapp is here

    我添加了一个“toast”来监视onEdit函数,仅用于测试目的

相关问题