繁体   English   中英

在谷歌表单提交API调用中自定义函数更新单元格

[英]Make custom function update cells from API call on google form submit

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

下面是我用来从公共METAR API获取温度的函数,当我从打开的Google工作表文档中的单元格调用它时,它可以正常工作。 我无法从谷歌文档获得的是如何在表单提交时触发它并将其链接到列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;
}

尝试这个:

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.
}

谢谢@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
}

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM