Заполнение ответов формы Google из электронной таблицы Google

StackOverflow https://stackoverflow.com//questions/21015264

Вопрос

Я пытаюсь (и на данный момент безуспешно) заполнить форму Google из электронной таблицы Google, используя элементы, которые я взял с этого веб-сайта, и этот чрезвычайно полезный ответ, предоставленный Могсдадом. здесь.

В идеале я ищу:

  1. Logger.log (URL) регистрирует URL-адреса для всех данных, хранящихся в электронной таблице. Можно ли просто записать последнюю запись и использовать ее для создания URL-адреса?

  2. Возможно ли, чтобы предварительно заполненный URL-адрес автоматически отправлялся после заполнения данными?Я нашел эту полезную статью здесь что говорит о том, что это можно сделать?

  3. Данные, хранящиеся в электронной таблице Google, представляют собой данные, полученные из другой формы Google.Это связано с необходимостью использования Excel (отсутствие подключения к Интернету) с формулой конкатенации для объединения всех ячеек с данными в одну.Затем это отправляется в другую форму Google, которая этот скрипт для разделения данных по столбцам, готовый ответить на вопросы.Повлияет ли это на триггер, необходимый для автоматической отправки при отправке?

Могу я добавить, что у меня довольно ограниченное понимание этого вопроса, поэтому, пожалуйста, будьте осторожны, если это кажется довольно простым!

Это было полезно?

Решение

можно ли просто записать последнюю запись и использовать ее для создания URL-адреса?

Я не уверен, что следую за вами здесь - в этом другом ответе Logger.log() Это заявление было просто для того, чтобы продемонстрировать, что вы можете сгенерировать правильный URL-адрес, если захотите его распространять.Вместо того, чтобы регистрировать это, вы просто используете содержимое переменной url.

Но давайте двигаться дальше, потому что мне кажется, это немного не по вашему пути.

Возможно ли, чтобы предварительно заполненный URL-адрес автоматически отправлялся после заполнения данными?

Есть лучшая отправная точка. Можем ли мы программно отправлять информацию из электронной таблицы в форму Google? Конечно!Видеть Используйте сценарии приложений, чтобы открыть форму и сделать выбор..Это более надежный способ выполнить работу, чем тот, который вы видите в статье «Хитрости с URL».

В случае «автоматической отправки» или имитации отправки формы вам вообще не нужно беспокоиться о предварительно заполненном URL-адресе.Это ярлык для надоедливых людей.То, что вы хотите, это собрать воедино payload для POST Вместо этого запросите компьютер и полностью обходите пользовательский интерфейс формы.

Что-то про Эксель...Повлияет ли это на триггер, необходимый для автоматической отправки при отправке?

(Похоже...) Вы используете Форму1 для получения данных в Таблицу1, а затем ожидаете реакции на (человеческую?) отправку Формы1, заставляя машину отправлять Форму2 после разделения данных из Формы1.

Да, вам нужно быть осторожным, чтобы разделение столбцов было выполнено, прежде чем вы попытаетесь прочитать информацию для отправки формы 2.

Я полагаю, что вам лучше всего подойдет триггерная функция отправки формы для Spreadsheet1, которая разбивает строку, полученную от Form1, а затем немедленно отправляет POST в Form2.Затем я записывал тот факт, что это действие произошло, используя технику из Триггер электронной почты по электронной почте.

Другие советы

  1. Это возможно для предварительно заполненного URL-адреса для автоматического представления после заполнения данных? Я нашел эту полезную статью здесь Что говорит о том, что это можно сделать?

как mogsdad сказал

Есть лучшая отправная точка. Можем ли мы программно представить информацию из электронной таблицы в форму Google? Конечно!

Согласно редактированию для Используйте сценарии приложений для открытия формы и сделать выбор , метод полезной нагрузки теперь устарел. Альтернатива состоит в том, чтобы использовать сервис приложений формы. Ниже приведена адаптация, которую я сделал в EverbetterBuilurls 1 by mogsdad для отправки ответов вместо создания предварительно заполненных URL-адресов и использоваться в автономном файле проекта Google Script.

Оригинальные строки кода, которые были изменены, прокомментированы. Также я вставил некоторые обрывы, чтобы избежать горизонтальной полосы прокрутки.

/**
 * Use Form API to populate form
 * 
 * Addapted from https://stackoverflow.com/a/26395487/1677912
 */
function populateFormResponses() {
  //var ss = SpreadsheetApp.getActive();
  var id = '11KDxp1C6jAZaTMNlGHke8zEzQ7aZrFSFGABdwUHEV80';
  var ss = SpreadsheetApp.openById(id);
  var sheet = ss.getSheetByName("Form Responses 1");
  var data = ss.getDataRange().getValues();  // Data for pre-fill
  var headers = data[0];                     // Sheet headers == form titles (questions)

  var formUrl = ss.getFormUrl();             // Use form attached to sheet
  var form = FormApp.openByUrl(formUrl);
  var items = form.getItems();
  //var urlCol = headers.indexOf("Prefilled URL");   // If there is a column labeled this
                                                     // way, we'll update it

  // Skip headers, then build URLs for each row in Sheet1.
  for (var row = 1; row < data.length; row++ ) {
    //Logger.log("Generating pre-filled URL from spreadsheet for row="+row);
    Logger.log("Generating response from spreadsheet for row="+row);
    // build a response from spreadsheet info.
    var response = form.createResponse();
    for (var i=0; i<items.length; i++) {
      var ques = items[i].getTitle();           // Get text of question for item
      var quesCol = headers.indexOf(ques);      // Get col index that contains this 
                                                // question
      var resp = ques ? data[row][quesCol] : "";
      var type = items[i].getType().toString();
      Logger.log("Question='"+ques+"', resp='"+resp+"' type:"+type);
      // Need to treat every type of answer as its specific type.
      switch (items[i].getType()) {
        case FormApp.ItemType.TEXT:
          var item = items[i].asTextItem();
          break;
        case FormApp.ItemType.PARAGRAPH_TEXT: 
          item = items[i].asParagraphTextItem();
          break;
        case FormApp.ItemType.LIST:
          item = items[i].asListItem();
          break;
        case FormApp.ItemType.MULTIPLE_CHOICE:
          item = items[i].asMultipleChoiceItem();
          break;
        case FormApp.ItemType.CHECKBOX:
          item = items[i].asCheckboxItem();
          // In a form submission event, resp is an array, containing CSV strings. Join 
          // into 1 string.
          // In spreadsheet, just CSV string. Convert to array of separate choices, ready 
          // for createResponse().
          if (typeof resp !== 'string')
            resp = resp.join(',');      // Convert array to CSV
          resp = resp.split(/ *, */);   // Convert CSV to array
          break;
        case FormApp.ItemType.DATE:
          item = items[i].asDateItem();
          resp = new Date( resp );
          break;
        case FormApp.ItemType.DATETIME:
          item = items[i].asDateTimeItem();
          resp = new Date( resp );
          break;
        default:
          item = null;  // Not handling DURATION, GRID, IMAGE, PAGE_BREAK, SCALE, 
                        // SECTION_HEADER, TIME
          break;
      }
      // Add this answer to our pre-filled URL
      if (item) {
        var respItem = item.createResponse(resp);
        response.withItemResponse(respItem);
      }
      // else if we have any other type of response, we'll skip it
      else Logger.log("Skipping i="+i+", question="+ques+" type:"+type);
    }

    // Submit response
    response.submit();

    // Generate the pre-filled URL for this row
    //var editResponseUrl = response.toPrefilledUrl();

    // If there is a "Prefilled URL" column, update it
    //if (urlCol >= 0) {
    //  var urlRange = sheet.getRange(row+1,urlCol+1).setValue(editResponseUrl);
    //}
  }
};
.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top