2017-02-23 10 views
0

Предположим, что я менеджер по найму, и мне нужно провести собеседование с 20 разными кандидатами на 20 разных датах, и мне нужно подтверждение «да» или «нет», если они могут присутствовать на указанной дате. Я только хочу показать дату, назначенную интервьюируемому в форме, но мне нужны другие даты, скрытые в форме (для других интервьюеров), чтобы они отображались в листе «Ответы». Также важно, чтобы они чувствовали себя «особенными», поэтому мне нужно адресовать их там, где есть имя в предварительно заполненном текстовом поле (это текстовое поле будет тем, что заполнено в листе ответов). Важно, чтобы кандидаты были скрыты друг от друга, поэтому их не обескураживают, поэтому создание предварительно выпадающего меню «выпадающего меню» для них на выбор не является вариантом.Получить ссылку только на «СЕКЦИЯ»

В идеале, эти респонденты будут видеть только 2 поля при открытии формы:

  • Там Полное имя (предварительно заполненные поля текста)
  • Там Assigned Дата (множественный выбор: «да» или " нет ")


СПРАВКИ:

  • 1 Google Форма (2 поля формы - остальные скрыты)
  • 20 Опрошенные (предварительно заполненные текстовое поле)
  • 20 Назначенные Даты (множественный выбор: "да" или "нет")
  • 1 Google "Ответы" Лист (21 колонок)

Я пытался ...

  1. укажи URL ссылки, основанные на укажи «множественный выбор» ответ (не повезло)
  2. Исследования по форме Google «Скрытые поля» (не повезло)
  3. Исследования отправки пользовательских ссылку, указывающую на «форму в разделе» (может быть?)

Кто-нибудь знает, как наилучшим образом достичь этого?

Заранее спасибо.


GOOGLE ФОРМА

┌────────────────────────┐ 
    │ NAME (pre-populated) │ 
    └────────────────────────┘ 

    Will you be attending on <custom-date>? 

     ⦿ YES 
     ⦾ NO 
     ⦾ MAYBE 

    ╔════════╗ 
    ║ SUBMIT ║ 
    ╚════════╝ 

GOOGLE ЛИСТ (Отзывы)

 # | NAME | 1/1 | 1/2 | 1/3 | - - - - - -> 1/20 
    --------------------------------------------------------- 
    1 | ARON | YES |  |  | 
    --------------------------------------------------------- 
    2 | BRAD |  | YES |  | 
    --------------------------------------------------------- 
    3 | CRIS |  |  | NO | 
    --------------------------------------------------------- 
     |   |  |  |  | 
     |   |  |  |  | 
    20 | ZEEK |  |  |  |    
     V   V  V  V  V 

ответ

3

Вы можете создавать персонализированные ссылки с уникальными параметрами URL для каждого интервьюируемого и использования приложений скрипт doG et (e), чтобы получить эти параметры и обслуживать персонализированные веб-страницы.https://developers.google.com/apps-script/guides/web

Короче говоря, персонализированная ссылка может быть создана, как показано ниже, чтобы отправить запрос на получение запроса на webApp https://script.google.com/macros/s/...../exec? имя = A2 & дата = 1/2/2017 и получить параметры URL с этим:

function doGet(e){ 
    var param = e.queryString //Will get name=A2&date=1/2/2017 
    //or 
    var param = e.parameter //Will get {"name": "A2", "date": "1/2/2017"} 
} 

Вы можете создавать персонализированные ссылки, используя простую формулу = СЦЕПИТЬ, как в этом примере spreadsheet в «Лист2». Вы можете отправить эту персонализированных ссылки на каждого опрашиваемого, и когда они получают доступ к веб-странице вы служите им персонифицированную веб-страницу на параметры URL следующим образом:

function doGet(e) { 

    var param = e.queryString 
    var parameters = param.split("&") 
    // This just checks only 2 parameters are present else gives a invalid link 
    if (param != null && parameters.length == 2){ 
    param = e.parameter 
    var name = param.name 
    var date = param.date 
    var html = HtmlService.createHtmlOutputFromFile("Invite") 
    var htmlTemplate = html.asTemplate().getRawContent() 
    // use the replace function to input the name and date on the page 
    // You also replace the hidden input values at the same time 
    htmlTemplate = htmlTemplate.replace(/customName#/gi, name) 
    htmlTemplate = htmlTemplate.replace(/customDate#/gi, date) 
    html = HtmlService.createHtmlOutput(htmlTemplate).asTemplate().evaluate() 
    }else { 
    var html = HtmlService.createHtmlOutput("<b> Invalid Link <b>") 
    } 
    return html 

} 

HTML код:

<!DOCTYPE html> 
<html> 
    <head> 
    <base target="_top"> 
    </head> 
    <body> 
    <div id ="div_form"> 
    <form id="RSVPform" onSubmit = "return false"> 
    <h1> customName# </h1> <br> 
    <input type = "hidden" id = "name" value = 'customName#' > 
    Will you be attending on customDate# <br> 
    <input type = "hidden" id = "date" value = 'customDate#' > 
    <input type = "radio" name = "RSVP" value = "Yes" checked>Yes <br> 
    <input type = "radio" name = "RSVP" value = "No">No <br> 
    <input type = "radio" name = "RSVP" value = "Maybe">Maybe <br> 
    <button type = "button" onClick ="sendRSVP()">Submit</button> 
    </form> 
    </div> 
    <div id="accept"></div> 
    <script> 

    function sendRSVP(){ 
    var resp = [] 
    resp[0] = document.getElementById("name").value 
    resp[1] = document.getElementById("date").value 
    resp[2] = document.querySelector('input[name="RSVP"]:checked').value; 
    google.script.run.withSuccessHandler(closeForm).enterRSVP(resp) 
    } 

    function closeForm(foundIndex){ 
    var subResp 
    if(foundIndex){ 
     subResp = "Thank You for your response" 

    } else { 
     subResp = "Oops! Cannot find the meeting event" 
    } 

    document.getElementById("div_form").style.display = "none" 
    document.getElementById("accept").innerHTML = subResp 
    } 

    </script> 
    </body> 
</html> 

Наконец, этот код будет проверять и введите ответ на соответствующую строку и столбец в таблице

function enterRSVP(resp){ 
var ss = SpreadsheetApp.openById(id) 
var sheet = ss.getSheetByName("Sheet1") 
var RSVPdata = sheet.getRange(1,1,sheet.getLastRow(),sheet.getLastColumn()).getValues() 
//match name 
for (var i=0;i<RSVPdata.length;i++){ 
    if(resp[0] == RSVPdata[i][0]){ 
    var setRowIndex = true 
    break 
    } 
} 
    if(setRowIndex) 
    var rowIndex = i+1 
    else 
    return false 
    //Match Date 
    for (var i= 0; i<RSVPdata[0].length; i++){ 
    if(resp[1] == RSVPdata[0][i]) { 
     var setColIndex = true 
     break 
    } 
    } 
    if(setColIndex) 
    var colIndex = i+1 
    else 
    return false 

    sheet.getRange(rowIndex,colIndex).setValue(resp[2]) 
    return true 
} 

Вы можете найти рабочий пример здесь, в этом spreadsheet. Просто используйте любые ссылки на Sheet2, чтобы получить персонализированную форму. После отправки этой формы Sheet1 будет обновляться.

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

+0

Ницца! Я собираюсь долго смотреть на это решение первым делом завтра – Oneezy

+0

Так у вас был такой длинный взгляд? Вы получили его на работу? –

+0

Некоторые другие вещи подошли и украли мое внимание. Я приму свой ответ, когда у меня будет время пройти его – Oneezy

Смежные вопросы