使用表单更新Google电子表格中的现有数据?

jup*_*can 7 forms google-sheets google-apps-script google-sheets-api

我想建立一种自动系统来更新一些比赛结果以获得冠军.我有一个自动电子表格,所有结果都显示但是我需要花费很多时间来更新所有结果,所以我想知道是否可以制作表格以便更容易地更新它们.

在表格中,我将输入他在比赛中赢得的车手名称和数量.冠军每个月有4场比赛所以是的,我的问题是你们是否知道使用表格更新现有数据(存储在电子表格中)的方法.让我们说在第一场比赛中,车手'X'赢得了10分.我将在表单中插入此数据,然后从电子表格中调用它以显示它,这是正确的.当我想要更新第二场比赛结果等问题时.如果驾驶员'X'在第二场比赛中获得12分,是否有办法更新该驾驶员之前的10分并改为22分?或者我可以自动将第二场比赛结果添加到第一场比赛中吗?我的意思是,如果我在表单上插入第二个比赛结果,它可以查找驱动程序'X'条目并将此点添加到它以前的那些点.Dunno,如果有可能的话.

也许我可以用另一种方式做到这一点.任何帮助都感激不尽!谢谢.

Har*_*old 5

我相信你可以在这里找到你想要的一切.
这是一个表单网址,当您回答此表单时,您将拥有存储数据的电子表格的网址.存储的信息之一是修改您的响应的网址,如果您按照链接它将再次打开表单并因此更新电子表格.执行此操作的代码位于电子表格的第二张表中.
这是一个谷歌应用程序脚本代码,需要在表单中关联并使用onFormSubmit触发器触发.


Ser*_*sas 5

也许我错过了您的问题中的某些内容,但我不太理解Harold的答案...这是严格执行您要求的代码,它计算在表单中输入的4个数字的总累加值并将其显示在电子表格上。

我将4个问题称为“ 比赛编号1 ”,“ 比赛编号2 ” ...,结果出现在第2行,因此您可以设置标题。

我去除了任何非数字字符,以便您可以更自由地键入响应,仅保留数字。

这里形成SS这里在Sheet1原始结果和Sheet2的计数

脚本进入电子表格,并由onFormSubmit触发器触发。

function onFormSubmit(e) {
  var sh = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet2');
  var responses = []
  responses[0] = Number(e.namedValues['race number 1'].toString().replace(/\D/g,''));
  responses[1] = Number(e.namedValues['race number 2'].toString().replace(/\D/g,''));
  responses[2] = Number(e.namedValues['race number 3'].toString().replace(/\D/g,''));
  responses[3] = Number(e.namedValues['race number 4'].toString().replace(/\D/g,''));
  var totals = sh.getRange(2,1,1,responses.length).getValues();
  for(var n in responses){
    totals[0][n]+=responses[n];
  }
  sh.getRange(2,1,1,responses.length).setValues(totals);
}
Run Code Online (Sandbox Code Playgroud)

编辑:我更改了代码,使您可以轻松更改响应数...范围将自动更新。


编辑2:一个接受结果为“ if”条件的空响应的版本:

function onFormSubmit(e) {
  var sh = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet2');
  var responses = []
  responses[0] = Number((e.namedValues['race number 1']==null ? 0 :e.namedValues['race number 1']).toString().replace(/\D/g,''));
  responses[1] = Number((e.namedValues['race number 2']==null ? 0 :e.namedValues['race number 2']).toString().replace(/\D/g,''));
  responses[2] = Number((e.namedValues['race number 3']==null ? 0 :e.namedValues['race number 3']).toString().replace(/\D/g,''));
  responses[3] = Number((e.namedValues['race number 4']==null ? 0 :e.namedValues['race number 4']).toString().replace(/\D/g,''));
  var totals = sh.getRange(2,1,1,responses.length).getValues();
  for(var n in responses){
    totals[0][n]+=responses[n];
  }
  sh.getRange(2,1,1,responses.length).setValues(totals);
}
Run Code Online (Sandbox Code Playgroud)