7

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

在表格中,我将输入车手姓名和他在比赛中赢得的积分数。锦标赛每个月有 4 场比赛,所以是的,我的问题是你们是否知道使用表格更新现有数据(存储在电子表格中)的方法。假设在第一场比赛中,车手“X”获得了 10 分。我会在表格中插入这些数据,然后从电子表格中调用它来显示它,没错。当我想更新第二场比赛结果等等时,问题就来了。如果车手“X”在第二场比赛中获得 12 分,有没有办法更新该车手之前的 10 分并改为获得 22 分?或者我可以将第二个比赛结果自动添加到第一个比赛结果中吗?我的意思是,如果我在表格中插入第二场比赛的结果,它可以寻找车手“X”吗 条目并将此点添加到它以前拥有的点。不知道有没有可能。

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

4

3 回答 3

5

我相信你可以在这里找到你想要的一切。
这是一个表单 url,当您回答此表单时,您将获得存储数据的电子表格的 url。存储的信息之一是修改您的回复的 url,如果您点击链接,它将再次打开表单并更新电子表格。执行此技巧的代码位于电子表格的第二张表中。
这是一个谷歌应用程序脚本代码,需要在表单中关联并使用 onFormSubmit 触发器触发。

于 2014-02-14T17:33:56.730 回答
5

也许我在你的问题中遗漏了一些东西,但我不太明白哈罗德的回答......这是一个严格按照你要求的代码,它计算表格中输入的 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);
}

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


编辑 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);
}
于 2014-02-14T20:36:46.150 回答
0

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

  1. 映射每个提交的响应的唯一键,例如用户 ID 或电子邮件。
  2. 两个 Google 表单
    :请求唯一密钥
    b. 使用该唯一键检索相关数据
于 2019-10-10T21:59:17.097 回答