【问题标题】:Make custom function update cells from API call on google form submit从谷歌表单提交的 API 调用中制作自定义函数更新单元格
【发布时间】:2019-05-02 22:12:31
【问题描述】:

我创建了一个链接到谷歌表格的谷歌表单。提交后,表单中的数据会更新链接表中的 A-D 列。现在我想要一个自定义脚本在提交时调用外部 API,并将响应中的数据写入 E 列。我正在尝试调用天气 API,以便在用户提交表单时记录天气数据。

以下是我用来从公共 METAR API 获取温度的函数,当我从打开的谷歌表格文档中的单元格调用它时,它工作正常。我无法从谷歌文档中得到的是如何在表单提交时触发它并将其链接到 E 列和当前表单答案行。据我了解,不可能从单元格调用此函数,我需要以某种方式在脚本中引用单元格位置(触发脚本的行 + 列 E)?

function GetMETAR() {
  var url = 'https://avwx.rest/api/metar/KJFK?options=&format=json&onfail=cache';
  var response = UrlFetchApp.fetch(url, {'muteHttpExceptions': true});
  var json = response.getContentText();
  var data = JSON.parse(json);
  var tempr = data.temperature.value;
  return tempr;
}

【问题讨论】:

  • 您是否尝试过菜单:编辑/项目触发器并为此功能设置表单提交?
  • 我找到了这个功能,但我想因为函数不是直接从单元格调用而是由项目触发器调用,所以我需要在电子表格中引用我希望函数返回 tempr 的单元格价值... - 这是一个问题...

标签: google-apps-script google-sheets google-forms


【解决方案1】:

试试这个:

function GetMETAR(name,cell) {
  var name=name || 'Sheet2';//if you don't want to use the parameters you can set these defaults
  var cell=cell || 'B4';
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName(name);
  var rg=sh.getRange(cell);
  var url = 'https://avwx.rest/api/metar/KJFK?options=&format=json&onfail=cache';
  var response = UrlFetchApp.fetch(url, {'muteHttpExceptions': true});
  var json = response.getContentText();
  var data = JSON.parse(json);
  var tempr = data.temperature.value;
  rg.setValue(tempr);//cell that you want the data to go to.
}

【讨论】:

    【解决方案2】:

    感谢@Cooper,这是我的最终代码:

    function GetMETAR() {
      var ss=SpreadsheetApp.getActiveSheet();//set active sheet where form answers are stored 
      var lr = ss.getLastRow();//since form pastes last answer to last row we get its number
      var rg = ss.getRange(lr,8,1,5);//here I set range where I will paste info from API CALL
      var url = 'https://avwx.rest/api/metar/UUWW?options=&format=json&onfail=cache';//API url
      var response = UrlFetchApp.fetch(url, {'muteHttpExceptions': true});//API call
      var json = response.getContentText();//response JSON to text
      var data = JSON.parse(json);//JSON text parse
      var tempr = data.temperature.value;//parsing values
      var wind_spd = data.wind_speed.value;
      var baro = data.altimeter.value;
      var dew = data.dewpoint.value;
      var wind_dir = data.wind_direction.value;
      var values = [[tempr,wind_spd,wind_dir,baro,dew]];//cobining values in array to paste
      rg.setValues(values);//pasting in range
    }
    

    脚本设置为在表单提交时触发

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多