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

时间:2014-02-14 15:30:08

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

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

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

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

3 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:4)

也许我在你的问题中遗漏了一些内容,但我并不理解哈罗德的回答...... 这是一个严格按照您的要求执行的代码,它计算在表单中输入的4个数字的累计总值,并在电子表格中显示。

我拨打了4个问题“比赛号码1 ”,“比赛号码2 ”......结果出现在第2行,因此您可以设置标题。< / p>

我将任何非数字字符条带化,这样您就可以更自由地键入响应,只保留数字。

form hereSS here 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);
}

编辑:我更改了代码,以便您轻松更改回复数量...范围将自动更新。


编辑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);
}

答案 2 :(得分:0)

现在可能为时已晚。我相信我们需要一些东西(我还没有尝试过)

  1. 用于映射每个提交的响应(例如用户的ID或电子邮件)的唯一键。
  2. 两个Google表单:
    一种。请求唯一密钥
    b。用该唯一键检索相关数据