当前位置: 首页 > 知识库问答 >
问题:

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

盖锐
2023-03-14

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

下面是我用来从公共MetarAPI获取温度的函数,当我从打开的google sheet文档中的一个单元格调用它时,它工作得很好。我无法从谷歌文档中得到正确答案的是如何在表单提交时触发它,并将其链接到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;
}

共有2个答案

江宏放
2023-03-14

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

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

罗均
2023-03-14

试试这个:

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.
}
 类似资料:
  • 我有一个正在写的剧本,需要一些帮助。 首先,我的脚本应该如何工作。 脚本:用户填写谷歌表单并点击提交。提交后,我的脚本运行并从google工作表中读取我在工作表中操作的一系列数据单元。然后将数据单元格格式化为字符串,并在表单的确认消息中提示。 现在问题来了。 问题:当我提交我对表格的回复时,从表格到表格的一切都很好。当我手动运行代码时,代码工作正常。当我提交表单响应时,事件历史记录会显示触发器并说

  • 我正在尝试使用脚本中的自定义js函数作为GoogleSheets中过滤单元函数的条件。 示例: 返回/(一个值或数组,基于范围大小)。 自定义函数单独工作得很好,比如填充该列。但是在上面的中,我总是有这个错误: 我尝试用谷歌搜索这个问题,但只得到了基于内置谷歌表格功能的解决方案。此外,我试图将此函数与筛选器和条件格式“自定义公式”字段集成,但没有成功。 自定义函数代码: 返回所提供单元格或区域的背

  • 我在PHP服务器中使用以下代码更新单元格中的值 运行此请求时,收到以下错误: 在PHP中,一次更新多个不连续单元格的GoogleSheetsAPI请求的正确方法是什么?

  • 我有一个电子表格,记录了几个月的旧账户。有没有办法让Google Sheets在每个月的1号自动更新一个单元格? VG:一个账户有78个月的历史,在9月1日它就有79个月了。我想在本月1日自动更新它,这样我就不必在每个帐户年龄单元中手动添加1。

  • 我想在单击该行中的一个按钮后更新primefaces数据表中的一列。 我的jsf页面: 我的访客Bean: visitService将间隙从OK更改为NOK,但我的datatables列没有更改。有什么想法吗? 表面5.2 我已经研究了如何只更新primefaces数据表中的特定单元格,但这似乎并没有解决它。

  • 对编码完全陌生,我一直在自学。我对自己迄今为止所取得的成就感到非常高兴,现在我想拓展我的学习领域! 所以我组织青少年足球比赛。球队通过谷歌表格进入比赛。表格进入谷歌表格,然后我使用公式确保我可以看到每个年龄组有多少队参赛。每个年龄组在锦标赛中可以拥有最多数量的球队。指向活动窗体的链接是https://forms.gle/8VoBddM8AAJMFXqM7 我想做的事 目前,当一个年龄组接近满员时,