2017-08-21 39 views
-1

我目前正在努力嘗試從電子表格構建Google表單,並且我不確定如何以編程方式構建條件問題並使用Google應用程序腳本進行分支。如何向Google表單添加條件問題和邏輯流?

電子表格的格式如下:

https://imgur.com/a/bBYkU

而我遇到的問題是搞清楚如何讓這個問題1.1例如去到1.2時,你說的沒錯,但如果你說不,你會問問題2。我查看了PageNavigationType,但我正在遍歷電子表格,因此我不確定如何鏈接到尚未製作的頁面。

回答

0

從題庫

問題本不具備條件分支基於以前的答案,但涵蓋了很多其他的東西。我已經做了類似於你正在做的事情,但它是爲單一目的而構建的,而不是用於其他用戶重新編程的概括。

下面是一個包含在電子表格中的Web應用程序示例,我將其稱爲問題庫問題。您可以選擇問題數量,並從問題庫中隨機選擇多個問題。它生成表單,收集結果並將其存儲在電子表格中。我有一個視頻,顯示如何使用和安裝它here

Code.gs文件:

function onOpen() 
{ 
    SpreadsheetApp.getUi().createMenu('Questions Menu') 
     .addItem('Questions', 'questionsToHtml') 
     .addToUi(); 
} 

function selectTest() 
{ 
    var qA=selectQuestions(5,24); 
    Logger.log(qA); 
} 

function selectQuestionIndexes(n,m) 
{ 
    var set=[]; 
    do 
    { 
    var i=getRandomIntInclusive(0,m); 
    if(set.indexOf(i)<0) 
    { 
     set.push(i); 
    } 
    }while(set.length<n); 
    return set; 
} 

function getRandomIntInclusive(min, max) 
{ 
    min = Math.ceil(min); 
    max = Math.floor(max); 
    return Math.floor(Math.random() * (max - min + 1)) + min; //The maximum is inclusive and the minimum is inclusive 
} 

function getCpData() 
{ 
    var ss=SpreadsheetApp.getActive(); 
    var cpSh=ss.getSheetByName('ControlPanel'); 
    var cpRg=cpSh.getDataRange(); 
    var cpVa=cpRg.getValues(); 
    var qsrcSh=ss.getSheetByName(cpVa[1][0]); 
    var adesSh=ss.getSheetByName(cpVa[1][1]); 
    var qnum=cpVa[1][2]; 
    var cpData={'qSrc':cpVa[1][0],'aDes':cpVa[1][1],'qNum':cpVa[1][2]}; 
    return cpData; 
} 

function getAnswerIndexes() 
{ 
    var ss=SpreadsheetApp.getActive(); 
    var sh=ss.getSheetByName(getCpData().qSrc); 
    var rg=sh.getRange(1,1,1,sh.getLastColumn()); 
    var vA=rg.getValues(); 
    var re=/Answer \d{1,2}/i; 
    var fidx=0; 
    var lidx=0; 
    var first=true; 
    for(var i=0;i<vA[0].length;i++) 
    { 
    if(String(vA[0][i]).match(re)) 
    if(first) 
    { 
     fidx=i; 
     first=false; 
    } 
    else 
    { 
     lidx=i; 
    } 
    } 
    return {'firstIdx':fidx,'lastIdx':lidx}; 
} 

function testResp() 
{ 
    var row = [[1,'What is the question?','no'],[2,'What is the question?','no'],[3,'What is the question?','no']]; 
    recordData(row); 

} 


function recordData(responses) 
{ 
    if(responses) 
    { 
    var ss=SpreadsheetApp.getActive(); 
    var sheetname=getCpData().aDes; 
    var sh=ss.getSheetByName(sheetname); 
    var ts=Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "MM/dd/yyyy HH:mm:ss"); 
    for(var i=0;i<responses.length;i++) 
    { 
     responses[i].splice(0,0,ts); 
     sh.appendRow(responses[i]); 
    } 
    } 
    return true; 
} 

function questionsToHtml(web) 
{ 
    var web=(typeof(web)!='undefined')?web:false; 
    var br='<br />'; 
    var cm=','; 
    var ss=SpreadsheetApp.getActive(); 
    var cpData=getCpData(); 
    var qnum=cpData.qNum; 
    var qa=getQAndA(); 
    var qi=getAnswerIndexes(); 
    var s=''; 
    for(var i=0;i<qa.length;i++) 
    { 
    //s+='<table>'; 
    //s+=Utilities.formatString('<tr><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>' , qa[i][0],qa[i][1],(qa[i][2])?qa[i][2]:'&nbsp;',(qa[i][3])?qa[i][3]:'&nbsp;',(qa[i][4])?qa[i][4]:'&nbsp;',(qa[i][5])?qa[i][5]:'&nbsp;'); 
    //s+='</table>'; 
    s+='<div id="d' + qa[i][0] + '" style="font-weight:bold;">' + qa[i][1]; 
    s+='<input type="hidden" value="' + qa[i][0] + '" class="hiding" />'; 
    for(var j=qi.firstIdx;j<=qi.lastIdx;j++) 
    { 
     if(qa[i][j]) 
     { 
     s+=br + '<input type="radio" name="n'+ qa[i][0] +'" value="' + qa[i][j] + '" />' + qa[i][j]; 
     } 
    } 
    s+='</div>' 


    } 
    s+='<div id="controls">'; 
    s+=br + '<input type="button" value="Submit" onClick="recordData();" />'; 
    //s+=br + '<input type="button" value="Do It Again" onClick="google.script.run.questionsToHtml();" />'; 
    s+='</div>'; 
    s+='</body></html>'; 
    //Logger.log(s); 
    if(!web) 
    { 
    var userInterface=HtmlService.createHtmlOutputFromFile('htmlToBody').append(s).setWidth(1000).setHeight(500); 
    SpreadsheetApp.getUi().showModelessDialog(userInterface, 'Current Form') 
    } 
    else 
    { 
    var output=HtmlService.createHtmlOutputFromFile('htmlToBody').append(s); 
    return output.setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL); 
    } 
} 

function doGet() 
{ 
    return questionsToHtml(true) 
} 

function getQAndA() 
{ 
    var qa=[]; 
    var cma=','; 
    var ss=SpreadsheetApp.getActive(); 
    var cpData=getCpData(); 
    var qsrcSh=ss.getSheetByName(cpData.qSrc); 
    var qsrcRg=qsrcSh.getRange(2,1,qsrcSh.getLastRow()-1,qsrcSh.getLastColumn()); 
    var qsrcVa=qsrcRg.getValues(); 
    var qs=selectQuestionIndexes(cpData.qNum,qsrcVa.length-1); 
    var aIdxs=getAnswerIndexes(); 
    for(var i=0;i<qsrcVa.length;i++) 
    { 
    var qas=''; 
    if(qs.indexOf(i)>-1) 
    { 
     qas+=qsrcVa[i][0] + cma + qsrcVa[i][1]; 
     for(j=aIdxs.firstIdx;j<=aIdxs.lastIdx;j++) 
     { 
     if(qsrcVa[i][j]) 
     { 
      qas+= cma + qsrcVa[i][j]; 
     } 
     } 
     qa.push(qas.split(cma)); 
    } 
    } 
    return qa; 
} 

htmlToBody.html

<!DOCTYPE html> 
<html> 
<head> 
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
    <script> 
    $(function() { 

     }); 
    function recordData() 
    { 
     var responses=[]; 
     var cm=','; 
     var divs = document.getElementsByTagName("div"); 
     for(var i=0;i<divs.length;i++) 
     { 
     var id=divs[i].getAttribute(['id']); 
     var qnum=$('div#' + id + ' ' + 'input.hiding').val(); 
     var question=document.getElementById(id).innerHTML; 
     var answer=$('input[name="n' + qnum + '"]:checked').val(); 
     if(id!='controls') 
     { 
      if(!answer) 
      { 
      window.alert('You did not answer question number ' + Number(i+1) + '. It is a requirement of this survey that all questions must be answered.'); 
      return; 
      } 
      else 
      { 
      var end='is near'; 
      var s=qnum + cm + question + cm + answer; 
      responses.push(s.split(cm)); 
      } 
     } 
     } 

     google.script.run 
      .withSuccessHandler(displayThanks) 
      .recordData(responses); 
    } 
    function displayThanks() 
    { 
     var divs = document.getElementsByTagName("div"); 
     for(var i=0;i<divs.length;i++) 
     { 
     divs[i].style.cssText="display:none;text-align:center"; 
     } 
     var elemDiv = document.createElement('div'); 
     elemDiv.innerHTML="<br /><h1>Thank You For Your Participation in This Survey</h1>"; 
     document.body.appendChild(elemDiv); 
    } 
    console.log('My Code Here'); 
    </script> 
    <style> 
    #reply{display:none;} 
    #collect{display:block;} 
    body { 
    background-image: url(""); 
    background-color: #ffffff; 
    background-repeat: no-repeat; 
} 
    </style> 
</head> 
<body>