Можно ли создать форму Google, которая автоматически обновляет свои вопросы из листа Google? - PullRequest
0 голосов
/ 11 июля 2019

У меня есть лист Google, в котором список имен из другой электронной таблицы заносится 3 раза в неделю.

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

"Был ли образец для (Имя) собран сегодня?" -да -на

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

 var ss = SpreadsheetApp.getActiveSpreadsheet();
 var sourceSheet = ss.getSheetByName('Data Sheet');
 var RDSheet = ss.getSheetByName('RawDataSheet');
 var lastrowdata = RDSheet.getLastRow();
 var RawData = sourceSheet.getRange(45,1,1,34);

 RDSheet.getRange(lastrowdata + 1, 1).setValue(new Date()); // Insert 
 timestamp for raw data
 RawData.copyTo(RDSheet.getRange(lastrowdata + 1, 2), {contentOnly: false});

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

1 Ответ

0 голосов
/ 12 июля 2019
  1. Чтобы динамически обновлять вопросы формы из электронной таблицы, необходимо назначить значения из ячеек на листе в качестве параметров для заголовков и вариантов вопросов.

Вот фрагмент кода, основанный на Ссылках на сервисы форм , которые:

function myFunction() {
    var form = FormApp.openById('Id of your form');
    var spreadsheet=SpreadsheetApp.openById('Id of your Spreadsheet');      
    form.setDestination(FormApp.DestinationType.SPREADSHEET, spreadsheet.getId());
    var source=spreadsheet.getSheetByName('Sheet1').getDataRange().getValues();
    var item = form.addCheckboxItem();
    item.setTitle(source[0][0]);          
    item.setChoices([item.createChoice((source[0][1])),item.createChoice((source[0][2]))]);
    form.addMultipleChoiceItem()
        .setTitle((source[1][0]))
        .setChoiceValues([(source[1][1]), (source[1][2])])
        .showOtherOption(true);
    form.addDateItem()
        .setTitle((source[2][0]));        
    Logger.log('Published URL: ' + form.getPublishedUrl());
    Logger.log('Editor URL: ' + form.getEditUrl());
}
  1. Чтобы оценить ответы формы, пожалуйста, посмотрите ссылку Class FormResponse .

Вот фрагмент кода, основанный на эталонном образце, который реализует переменную YesCounter. Он проходит через квест itnerest для всех отправляемых форм и увеличивает YesCounter для всех ответов, где ответ на вопрос был «да».

var YesCounter=0;
var formResponses = form.getResponses();
for (var i = 0; i < formResponses.length; i++) {
  var formResponse = formResponses[i];
  var itemResponses = formResponse.getItemResponses();
 //assuming the question of interest is question number 1:
    var itemResponse = itemResponses[0];
    if(itemResponse.getResponse()=='yes'){
     YesCounter++
    }  
}
Logger.log('The number of questions answered "yes" was: '+Yescounter);
  1. Вы можете установить триггер, основанный на времени , и связать его с функцией, которая считает "да" и отправляет электронное письмо через выбранные вами интервалы времени. enter image description here

  2. Если вам неудобно использовать Apps Script, есть также полезные надстройки (используйте по своему усмотрению), например, вот та, которая автоматически реализует динамическое обновление поля:

https://gsuite.google.com/marketplace/app/dynamic_fields/708020008404

...