获取链接到" SECTION"只要

时间:2017-02-23 04:10:30

标签: google-apps-script google-form

让我们说我是一名招聘经理,我需要在20个不同的日期对20位不同的候选人进行面试,我需要一个"是的"或"不"确认他们是否可以参加上述日期。我只想在表格中显示分配给受访者的日期,但我需要隐藏在表格中的其他日期(对于其他采访者),以便他们出现在"回复"片。同样重要的是他们感觉特别"所以我需要在预先填充的文本字段中通过名称来解决它们(这个文本字段将是响应中填充的内容)片)。让候选人彼此隐藏是非常重要的,这样他们就不会气馁,所以做一个预先填充的"下拉"他们可以选择的菜单不是一个选项。

理想情况下,这些受访者在打开表格时只会看到两个字段:

  • 有全名(预先填充的文字字段)
  • 指定日期(多项选择:"是"或"否")


回顾:

  • 1个Google表单(2个表单字段 - 其余隐藏)
  • 20位受访者(预先填充的文字字段)
  • 20个指定日期(多项选择:"是"或"否")
  • 1 Google"回复"表(21列)

我尝试过......

  1. 预填充的网址链接基于预先填写的"多项选择"回答(没有运气)
  2. 研究Google表格"隐藏字段" (没有运气)
  3. 发送指向"表单部分"的自定义链接的研究(也许?)
  4. 有谁知道实现这一目标的最佳方式?

    提前致谢。

    GOOGLE FORM

       ┌────────────────────────┐
       │  NAME (pre-populated)  │
       └────────────────────────┘
    
        Will you be attending on <custom-date>?
    
            ⦿ YES
            ⦾ NO
            ⦾ MAYBE
    
       ╔════════╗
       ║ SUBMIT ║
       ╚════════╝
    

    GOOGLE SHEET(回应)

         #  | 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
    

1 个答案:

答案 0 :(得分:3)

您可以为每位受访者创建具有唯一网址参数的个性化链接,并使用应用脚本doGet(e)功能获取这些参数并提供个性化网页。 https://developers.google.com/apps-script/guides/web

简而言之,可以像下面一样创建个性化链接,以向webApp发送获取请求 https://script.google.com/macros/s/...../exec名称= A2&安培;日期= 1 /二千〇一十七分之二 并获取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"}
}

您可以使用简单的= CONCATENATE公式创建个性化链接,如本例spreadsheet中的&#34; Sheet2&#34;。您可以将此个性化链接发送给每位受访者,当他们访问该网页时,您可以在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将会更新。

注意:在上面的示例中,所有日期都被格式化为文本/字符串。这是为了防止串联期间出现问题。其次,您必须编写一个脚本,将上述链接发送给每个受访者,这很容易实现。