Подтвердить что ты не робот

Возможно ли "заполнить" форму Google, используя данные из электронной таблицы google?

Я ищу способ "предварительно заполнить" форму google конкретными данными из электронной таблицы google. Форма будет иметь одинаковые "стандартные" вопросы для всех, но данные в первых двух вопросах будут "заполнены" уникальными данными из существующей электронной таблицы google. Данные будут уникальными на основе их адреса электронной почты в существующей электронной таблице.

ПРИМЕР ИСТОЧНИКОВ ИСТОЧНИКОВ

Col 1       Col 2        Col 3 
email       name         birthday  
@mike       Mike Jones   May 9th 1975  
@jim        Jim Smith    April 19th 1985

ФОРМ ПРИМЕР ОДИН

Вопрос 1 - предварительно заполненный данными (Майк Джонс) из электронной таблицы google.

Вопрос 2 - заполняется данными (9 мая 1975 г.) из электронной таблицы google.

Вопрос 3 - пустой (ожидание ответа пользователя)

Вопрос 4 - пустой (ожидание ответа пользователя)


ФОРМА ПРИМЕР ДВА

Вопрос 1 - предварительно заполненный данными (Джим Смит) из электронной таблицы google.

Вопрос 2 - предварительно заполненный данными (19 апреля 1985 г.) из электронной таблицы google.

Вопрос 3 - пустой (ожидание ответа пользователя)

Вопрос 4 - пустой (ожидание ответа пользователя)


Кто-нибудь знает, можно ли это сделать? Если да, любая помощь или направление будут НАСТОЯТЕЛЬНО оценены.

Заранее благодарю! Todd

4b9b3361

Ответ 1

Вы можете создать предварительно заполненный URL-адрес формы из редактора форм, как описано в документации для Дисковых форм. В итоге вы получите URL-адрес, например:

https://docs.google.com/forms/d/--form-id--/viewform?entry.726721210=Mike+Jones&entry.787184751=1975-05-09&entry.1381372492&entry.960923899

buildUrls()

В этом примере вопрос 1 "Имя" имеет идентификатор 726721210, а вопрос 2 - "День рождения" - 787184751. Вопросы 3 и 4 пусты.

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

function buildUrls() {
  var template = "https://docs.google.com/forms/d/--form-id--/viewform?entry.726721210=##Name##&entry.787184751=##Birthday##&entry.1381372492&entry.960923899";
  var ss = SpreadsheetApp.getActive().getSheetByName("Sheet1");  // Email, Name, Birthday
  var data = ss.getDataRange().getValues();

  // Skip headers, then build URLs for each row in Sheet1.
  for (var i = 1; i < data.length; i++ ) {
    var url = template.replace('##Name##',escape(data[i][1]))
                      .replace('##Birthday##',data[i][2].yyyymmdd());  // see yyyymmdd below
    Logger.log(url);  // You could do something more useful here.
  }
};

Это достаточно эффективно - вы можете отправить по электронной почте предварительно заполненный URL-адрес каждому человеку, и у них будут уже заданные вопросы.

betterBuildUrls()

Вместо того, чтобы создавать наш шаблон с использованием грубой силы, мы можем объединить его вместе программно. Это будет иметь то преимущество, что мы можем повторно использовать код, не задумываясь об изменении шаблона.

Каждый вопрос в форме - это элемент. Для этого примера предположим, что у формы есть только 4 вопроса, как вы описали их. Элемент [0] - "Имя", [1] - "День рождения" и т.д.

Мы можем создать ответ формы, который мы не будем отправлять - вместо этого мы частично заполним форму, только чтобы получить предварительно заполненный URL-адрес формы. Поскольку API-интерфейс Forms понимает типы данных каждого элемента, мы можем избежать манипулирования строковым форматом дат и других типов, что несколько упрощает наш код.

(РЕДАКТИРОВАТЬ: Есть ли более общая версия этого в флажках формы Google формы?)

/**
 * Use Form API to generate pre-filled form URLs
 */
function betterBuildUrls() {
  var ss = SpreadsheetApp.getActive();
  var sheet = ss.getSheetByName("Sheet1");
  var data = ss.getDataRange().getValues();  // Data for pre-fill

  var formUrl = ss.getFormUrl();             // Use form attached to sheet
  var form = FormApp.openByUrl(formUrl);
  var items = form.getItems();

  // Skip headers, then build URLs for each row in Sheet1.
  for (var i = 1; i < data.length; i++ ) {
    // Create a form response object, and prefill it
    var formResponse = form.createResponse();

    // Prefill Name
    var formItem = items[0].asTextItem();
    var response = formItem.createResponse(data[i][1]);
    formResponse.withItemResponse(response);

    // Prefill Birthday
    formItem = items[1].asDateItem();
    response = formItem.createResponse(data[i][2]);
    formResponse.withItemResponse(response);

    // Get prefilled form URL
    var url = formResponse.toPrefilledUrl();
    Logger.log(url);  // You could do something more useful here.
  }
};

yymmdd Функция

Ожидается, что любой элемент даты в предварительно заполненном URL-форме формы будет в этом формате: yyyy-mm-dd. Эта вспомогательная функция расширяет объект Date с помощью нового метода обработки преобразования.

При чтении дат из электронной таблицы вы получите объект Date javascript, если формат данных распознается как дата. (Ваш пример не распознается, поэтому вместо May 9th 1975 вы можете использовать 5/9/1975.)

// From http://blog.justin.kelly.org.au/simple-javascript-function-to-format-the-date-as-yyyy-mm-dd/
Date.prototype.yyyymmdd = function() {
  var yyyy = this.getFullYear().toString();                                    
  var mm = (this.getMonth()+1).toString(); // getMonth() is zero-based         
  var dd  = this.getDate().toString();             

  return yyyy + '-' + (mm[1]?mm:"0"+mm[0]) + '-' + (dd[1]?dd:"0"+dd[0]);
};