0

任务:在网络应用程序中打开一个谷歌电子表格,在该电子表格中选择一部分值,然后单击我的网络应用程序上的按钮,我应该得到选定的值。

我尝试通过 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 应用程序中的按钮时将发布的 url 作为表单的操作时。它不工作。

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

我在我的 web 应用程序中添加了上面的代码,电子表格在其中打开并显示!

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

我该如何解决?

4

1 回答 1

1

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

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

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

您需要将它们表达为:

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

......或它的变体。

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

于 2013-09-12T20:12:49.500 回答