【问题标题】:Accessing headers of a google spreadsheet using HTTP GET and Google App Script使用 HTTP GET 和 Google App Script 访问 google 电子表格的标题
【发布时间】:2014-01-01 20:57:24
【问题描述】:

我正在尝试在作为 WebApp 运行的 Google 应用脚本中使用 doGet() 返回 Google 电子表格的标题行。我正在使用 HTML 表单将 GET 请求发送到 WebApp,除了我不知道如何将标头返回到我的 javascript 之外,一切正常。我将发布我的代码:

HTML:
        <form id="getForm" method="get" action="My URL for WebApp">
        <label for="sheetGetID">SheetID</label>
        <input type="text" name="sheetGetID" id="sheetGetID" value="">
        <button class="ui-btn" onclick='submitGET()'>Submit</button>
    </form>

Javascript:

function submitGET() {
  var headers = $("getForm").submit();
  alert(headers);
}

谷歌应用脚​​本:

function doGet(e) {
//Trying To: Get headers from sheetID and then return to app, then have correct labels for the inputs, then use POST to post.
var ss = SpreadsheetApp.openById(ScriptProperties.getProperty('active'));
var sheet = ss.getSheetByName(e.parameter["sheetGetID"]);

//Return the first 3 cells, A1:C1,
var headers = sheet.getRange(1,1,1,sheet.getLastColumn()).getValues()[0];
return ContentService.createTextOutput(JSON.stringify(headers))
.setMimeType(ContentService.MimeType.JSON);
}

我收到了一个 JSON 对象返回,但它只是一个文本输出。我的问题是我将/如何将 JSON 返回并存储为 headers 变量?

【问题讨论】:

    标签: javascript json google-apps-script http-get


    【解决方案1】:

    doGet 方法的返回必须是 HTML。 构建另一个 html 页面并使用调用 HtmlService.createTemplateFromFile('newPag.html').evaluate()

    在您的页面内使用标签并放置您的服务器端代码来操作 json 对象。这样,您将创建良好的外观和感觉以及良好的可维护代码。

    【讨论】:

    • 我正在尝试将标题返回到幕后的移动应用程序。如果我使用“HtmlService.createTemplateFromFile('newPag.html').evaluate()”不会将我重定向到 newPag.html?我需要的只是将标题作为字符串返回给应用程序。我可能应该提到我正在使用 Phonegap。
    • 您想在应用脚本或手机中获取 http 标头。
    • 对不起,我不是很清楚。所以我将谷歌电子表格的第一行冻结并用作标题。我想以某种方式从电子表格中获取这些标题,使用 html/javascript 因为我使用phonegap,并将它们用作我的应用程序上的标签以进行输入,我已经从应用程序将数据发布到电子表格,但我' m 试图从电子表格中检索信息。为澄清起见,该应用程序是一个 android 应用程序。
    【解决方案2】:

    我不久前开始使用它,我忘记发布答案以防万一其他人需要它。

    您需要像 API 演示一样将其输出为 JSON 对象。您还需要附加 "?prefix=?"当您进行 $.getJSON() 调用时到 url。前缀部分是告诉 JQuery 你正在接收一个 JSON 对象。

    如果有人对此有任何问题,请发表评论,我会发布我使用的所有代码。

    【讨论】:

      【解决方案3】:

      所以在您的客户端,我使用的是 JQuery Mobile,如果没有它我不知道该怎么做,您会执行以下操作:

      sheetID = $("#sheetGetID").val();
      $.getJSON("https://script.google.com/macros/s/YOUR_KEY_GOES_HERE/exec?prefix=?",
          { sheetGetID: sheetID},
          function(results) {
          var fields = results.split(",");
          //Do something with fields
          }   
      );
      }
      

      #sheetGetID 是文本框,用户可以在其中输入表头的工作表 ID。 注意 ?prefix=?附加到 URL 的那部分是让 JQuery 知道它正在接收 JSON。那部分是必要的。该 URL 是您部署的 WebApp。

      在 Google App Script 端,即服务器端,你会有类似的东西:

      function doGet(request) {
        var ss = SpreadsheetApp.openById(ScriptProperties.getProperty('active')); 
        var sheet = ss.getSheetByName(request.parameter["sheetGetID"]);
        //Return the first 3 cells, A1:C1,
        var headers = sheet.getRange(1,1,1,sheet.getLastColumn()).getValues()[0];
      
        var result = headers.join();
        var content = request.parameters.prefix + '(' +JSON.stringify(result) + ')';
        return ContentService.createTextOutput(content)
          .setMimeType(ContentService.MimeType.JSON);
      }
      

      如果您对电子表格部分的工作方式有任何疑问,请参阅有关 Google API 的大量文档。当你使用 $.getJSON() 时调用 doGet(),从 G.A.S. 返回需要是 JSON。大部分内容都包含在 Google 的文档中,其中一些是我在 youtube 上观看 Google Developers Live 时发现的。如果您想做更多的事情,我强烈建议您检查这些来源。

      如果您对调用的内容或参数有任何疑问,您可以在 Google 上轻松找到。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-09-05
        • 1970-01-01
        • 2012-07-21
        • 1970-01-01
        • 2014-12-05
        • 2020-12-11
        • 2012-06-02
        • 2014-04-24
        相关资源
        最近更新 更多