如何从Web应用程序调用Google App Script?

时间:2013-09-12 17:32:27

标签: google-apps-script google-sheets

任务:在网络应用中打开Goog​​le电子表格,在该电子表格中选择一部分值,然后点击我的网络应用中的按钮,我就会获得选定的值。

我通过Google App脚本尝试了此操作(代码如下)。当我从在线运行脚本并在另一个选项卡中打开电子表格时,这种方法很有效。

      function doGet() 
      {
        var sheet = SpreadsheetApp.getActiveSheet();
        var data = sheet.getActiveRange().getValues();
        //Logger.log(data.length);
        for (var i = 0; i < data.length; i++) 
        {
          var output = HtmlService.createHtmlOutput("Product name: " + data[i][0] + ", Quantity:" + data[i][1]);  
        }

       //Logger.log(output.getContent());
      return HtmlService.createHtmlOutput(output);
      };

但是当我尝试将脚本部署为Web应用程序时,当我单击我的Web应用程序中的按钮时,将已发布的U​​RL作为我的表单的操作。它不起作用。

  <form action="https://script.google.com/macros/...." method="get">
<input type="submit" value="call">
  </form>

我在我的webapp中添加了上面的代码,其中打开并显示了电子表格!

现在,当我从我的网络应用程序中单击“调用”按钮时,它会抛出错误“TypeError:无法调用方法”getActiveRange“为null。”

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

当您在电子表格中运行脚本时,这些行具有意义:

    var sheet = SpreadsheetApp.getActiveSheet();
    var data = sheet.getActiveRange().getValues();

...但是从Web应用程序运行时它们不会。在这种情况下,没有“活动表”或“活动范围”。

您需要将其表达为:

    var sheet = SpreadsheetApp.openById('--ss_id--').openSheetByName('--sheet-name--');
    var data = sheet.getRange(--Some-range-expression--).getValues();

......或其中的一种变体。

例如,您无法在电子表格中的用户与Web应用程序之间进行交互,以传递所选单元格。你需要重新考虑你的任务。例如,您可以选择工作表中的单元格。使它们成为通过网络应用程序提供的命名范围。或者您可以添加一个菜单项来创建命名范围。