обновить существующие данные в электронной таблице Google с помощью формы?

Я хочу создать что-то вроде автоматической системы для обновления результатов некоторых гонок для чемпионата. У меня есть автоматизированная электронная таблица, в которой отображаются все результаты, но мне требуется много времени, чтобы обновить их все, поэтому мне было интересно, можно ли создать форму, чтобы их было легче обновлять.

В форму я введу имя гонщика и количество очков, которые он набрал в гонке. Чемпионат состоит из 4 гонок каждый месяц, так что да, мой вопрос: знаете ли вы, ребята, способ обновить существующие данные (хранящиеся в электронной таблице) с помощью формы. Предположим, что в первой гонке гонщик «Х» набрал 10 очков. Я вставлю эти данные в форму, а затем вызову их из электронной таблицы, чтобы отобразить их, правильно. Проблема возникает, когда я хочу обновить результаты второй гонки и так далее. Если гонщик «X» набирает во второй гонке 12 очков, есть ли способ обновить предыдущие 10 очков этого гонщика и поставить вместо них 22 очка? Или я могу автоматически добавить второй результат гонки к первому? Я имею в виду, если я вставлю в форму результаты второй гонки, сможет ли она найти запись водителя «X» и добавить эти очки к тем, которые у него были ранее. Не знаю, возможно это или нет.

Может быть, я могу сделать это по-другому. Любая помощь будет высоко ценится! Спасибо.


person jupcan    schedule 14.02.2014    source источник


Ответы (3)


Возможно, я что-то упустил в вашем вопросе, но я не очень понимаю ответ Гарольда... Вот код, который делает строго то, о чем вы просили, он подсчитывает общее совокупное значение 4 чисел, введенных в форму, и показывает его в электронной таблице. .

Я назвал 4 вопроса "номер гонки 1", "номер гонки 2"... и результат появится в строке 2, так что вы можете настроить заголовки.

Я удалил все нечисловые символы, чтобы вы могли печатать ответы более свободно, будут сохранены только цифры.

форма здесь и SS здесь (необработанные результаты на листе 1 и количество на листе 2)

script помещается в электронную таблицу и запускается триггером 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: версия, которая принимает пустые ответы с использованием условия «если» для результата:

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);
}
person Serge insas    schedule 14.02.2014
comment
Большое спасибо за Вашу помощь! Очень признателен! Это то, что я искал, но все же не совсем то, что я действительно хотел бы иметь. Сценарий, который вы мне дали, суммирует результаты четырех гонок, но для этого мне нужно вставить 4 результата сразу. Я имею в виду, что если бы я мог просто вставлять один результат каждый раз, это было бы намного полезнее, потому что я должен обновлять результаты еженедельно (4 гонки в месяц). - person jupcan; 15.02.2014
comment
не стесняйтесь описывать более подробно, чтобы я лучше понял :-) - person Serge insas; 15.02.2014
comment
И еще кое-что. Если у меня 13 водителей, может ли быть способ выбрать результат водителя, который я хочу вставить в форму, или мне нужно будет вставить 4 вопроса формы для каждого водителя? Вот почему я говорил, что если можно редактировать содержимое электронной таблицы с помощью формы, то, если это возможно, я вставлю результат гонки 1 для гонщиков 1, 2 и 3 в первую неделю, а затем их результаты для гонки 2, но просто обновлю предыдущую. один или добавить их. Не удалось вовремя отредактировать первый ответ, извините за это. Еще раз большое спасибо Сережа! :D - person jupcan; 15.02.2014
comment
Наверняка можно... так что будет 5 вопросов? Вопрос 1 - это имя водителя? Как они показаны на СС? - person Serge insas; 15.02.2014
comment
Обратите внимание, что ни один ответ не является обязательным, поэтому вы можете оставить некоторые вопросы пустыми... Я думаю, это не вызовет ошибки... нужно проверить... - person Serge insas; 15.02.2014
comment
Да. Первым вопросом будет имя гонщика, а остальные - результаты каждой из 4 гонок в месяц. Итак, на первой неделе я вставлю имя гонщика и очки, которые он набрал в первой гонке, затем на второй неделе я просто вставлю очки, которые он набрал во второй гонке (и имя, если необходимо), и так далее. на... Таким образом, СС добавит все баллы водителю (1, 2, 3 и 4 неделя). И то же самое с другими 12 водителями. Это что-то сложное, и мне интересно, можно ли это сделать с помощью Google Docs. :/ - person jupcan; 15.02.2014
comment
Я пытался просто вставить результаты гонки 1 и оставить остальные пустыми, но у меня это не сработало, Серж. СС не добавлял очков. - person jupcan; 15.02.2014
comment
Думаю, не так уж и сложно... не могли бы вы поделиться электронной таблицей с данными, показанными так, как вы хотите? Я добавлю код, соответствующий макету вашего листа. Что касается вашего последнего комментария, я обновлю код для обработки пустых ответов :-) - person Serge insas; 15.02.2014
comment
Конечно. Ну вот! – docs.google.com/spreadsheet/ – Спасибо за обработку пустых ответов тоже. :) - person jupcan; 15.02.2014

Я считаю, что вы можете найти все, что хотите, здесь .
Это URL-адрес формы. При ответе на эту форму вы получите URL-адрес электронной таблицы, в которой хранятся данные. Одной из сохраненных данных является URL-адрес для изменения вашего ответа. Если вы перейдете по ссылке, форма снова откроется и, как следствие, обновится электронная таблица. код для этого трюка находится на втором листе электронной таблицы.
Это код скрипта Google Apps, который необходимо связать с формой и запустить с помощью триггера onFormSubmit.

person Harold    schedule 14.02.2014
comment
Спасибо, Гарольд, за ответ! Вот почему я и не жду, я имею в виду, это не совсем то, что я ищу, потому что я могу редактировать результаты, но я должен обновлять все результаты вручную (добавляя баллы каждого водителя для каждого гонка чемпионов). - person jupcan; 15.02.2014
comment
Привет, Гарольд. Я думаю, что ваше решение - это почти то, что мне нужно, чтобы связать запись на листе с формой. Но когда я нахожусь на листе и нажимаю ссылку на форму, что-то редактирую, а затем нажимаю «Отправить», ваше решение создает новую запись. Я бы предпочел решение, в котором каждая запись имеет ссылку на форму, а редактирование формы обновляет запись. Это возможно? - person Christopher Werby; 11.07.2016
comment
@christopher Привет, я думаю, это было именно то, что он должен был сделать, но почему-то он больше не работает, я исправлю это на следующей неделе, я путешествую на этой неделе. - person Harold; 11.07.2016
comment
Два с половиной года назад вы написали ответ на Stack Overflow, и теперь я прошу вас оказать по нему техническую поддержку! Спасибо, Гарольд! Я действительно ценю это. - person Christopher Werby; 11.07.2016
comment
@ChristopherWerby Готово, я обновил скрипт, он должен снова работать правильно - person Harold; 20.07.2016
comment
@ Гарольд Чудесный! Я проверил его, и он работает так, как должен. (Существует странная задержка после обновления формы до того, как данные появятся в электронной таблице, но это проблема Google. Я упоминаю об этом только потому, что думал, что это не сработало, а затем, примерно через десять секунд, поле обновилось.) Теперь я должны выяснить, как вы сделали все это волшебство! Большое спасибо! - person Christopher Werby; 21.07.2016

Сейчас может быть слишком поздно. Я считаю, что нам нужно несколько вещей (я не пробовал)

  1. Уникальный ключ для сопоставления каждого отправленного ответа, например идентификатор пользователя или адрес электронной почты.
  2. Two Google Forms:
    a. To request the unique key
    b. To retrieve relevant data with that unique key
person yoonghm    schedule 10.10.2019