2015-01-15 93 views
0

我为我们的销售同事准备了Google表单,可以让他们选择他们的姓名,他们负责的国家,然后回答几个问题(这些问题总是相同的)。根据Google Apps脚本中的答案创建表单问题

名称列表和关联的国家被保存在电子表格中。我使用这个列表来填充名称的ListItem和每个同事的国家列表ListItem。

目前我有一个欢迎页面有两个ListItems:名称和产品。 选择一个名称并点击“继续”后,表格跳转到相应的页面,其中国家ListItem已经预先填好了国家。

我的问题是,这种方式我一直有一个非常长的形式,虽然用户只看到两页。此外,所分配的工作表对每个问题都有一个单独的列。

是否有可能基于所选名称“即时”生成第二页?

更新:

这是我的createFrom功能。通过传递所选名称来生成questionBlock“按需”会很好,或者至少设置生成的问题以保存对电子表格中同一列的响应。

function createForm() { 

    //Names 
    var Names = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J']; 
    var fullNames = ['Mr. Z A', 'Mr. Y B', 'Mr. X C', 'Ms. W D', 'Mr. V E', 'Ms. U F', 'Mr. T G', 'Mr. S H', 'Mr. R I', 'Mr. Q J']; 
    var Products = ['Product 1', 'Product 2']; 
    var questionBlock = {}; 

    var form = FormApp.create('Vertriebsländer und Zulassungsplan 2015'); 

    //Page 1 
    form.setTitle('formTitle') 
    .setDescription('Please fill out the following survey.'); 
    form.hasRespondAgainLink(); 
    form.canEditResponse(); 

    var lName = form.addListItem() 
    .setTitle('Please choose your name:') 
    .setRequired(true); 

    var choicesName = lName.getChoices(); 
    choicesName = []; 

    var lProduct = form.addListItem() 
    .setChoiceValues(Products) 
    .setTitle('Please choose the product:') 
    .setRequired(true); 

//Question Block Page 
    for(a = 0; a < Names.length; a++){ 
     choicesName.push(
     lName.createChoice(fullNames[a], 
         form.addPageBreakItem() 
         .setTitle('Welcome ' + fullNames[a] +'!') 
         .setGoToPage(FormApp.PageNavigationType.SUBMIT))); 

questionBlock[ ('lCountries' + Names[a]) ] = form.addListItem(); 
    questionBlock[ ('lCountries' + Names[a]) ].setTitle('Please choose a country:'); 
    questionBlock[ ('lCountries' + Names[a]) ].setRequired(true); 

questionBlock[('txtQuestion1')] = form.addTextItem(); 
    questionBlock[('txtQuestion1')].setTitle('Common Question 1'); 
    questionBlock[('txtQuestion1')].setRequired(true); 

questionBlock[('lQuestion2')] = form.addListItem(); 
    questionBlock[('lQuestion2')].setTitle('Question2'); 
    questionBlock[('lQuestion2')].setChoiceValues(['A', 'B', 'C']); 
    questionBlock[('lQuestion2')].setRequired(true); 

questionBlock[('lQuestion3')] = form.addListItem(); 
    questionBlock[('lQuestion3')].setTitle('Question3'); 
    questionBlock[('lQuestion3')].setChoiceValues(['A', 'B', 'C', 'D']); 
    questionBlock[('lQuestion3')].setRequired(true); 

questionBlock[('txtQuestion4')] = form.addTextItem(); 
    questionBlock[('txtQuestion4')].setTitle('Do you have any remarks?'); 
    questionBlock[('txtQuestion4')].setRequired(false); 
    } 

    lName.setChoices(choicesName); 

    //Fill country selection dropdown================== 

    //Spreadsheet 
    var ssCountries = SpreadsheetApp.openById('abcdefghijklmnopqrstuvwxyz1234567890'); 
    //Importing data from spreadsheet 
    var dataRange = ssCountries.getDataRange(); 
    var values = dataRange.getValues(); 


    for (i = 0; i < Names.length; i++) 
    { 
    choices = questionBlock[ ('lCountries' + Names[i]) ].getChoices(); 
    choices = []; 
    for (j = 0; j < values[0].length; j++) 
    { 
     var curr_name = values[0][j]; 
    if (curr_name == Names[i]) 
     { 
     for (k = 1; k < values.length; k++) 
     { 
      if (values[k][j].toString().length > 0) 
      {   
      choices.push(questionBlock[ ('lCountries' + Names[i]) ].createChoice(values[k][j])); 
      questionBlock[ ('lCountries' + Names[i]) ].setChoices(choices); 
      } 
     } 
     } 
    } 
    } 
    //Country selection dropdown filled================== 
} 
+0

请发布一些你曾经工作过的代码。 – KRR 2015-01-15 17:11:33

+0

我编辑了最初的queston以包含源代码。我想使用getItemResponds,但我无法真正弄清楚如何调试它,因为它在调试时总是空的。 (但也许我只是不明白这整个getResponses的东西) – 2015-01-17 09:04:04

回答

0

我不认为你可以编辑当前打开的窗体,并显示或隐藏问题。你当然可以用HTML做到这一点,但我认为你不可以在Google表单中这样做。你可以用代码编辑一个当前表单,但是你需要保存它,关闭表单,让用户重新打开它。

根据文档,你可以有一个窗体边栏。

Google Documentation - custom sidebar

所以,你可以显示自定义侧边栏,并显示或隐藏根据来自用户的响应使用HTML领域。所以,我的建议是,您的表单中没有自定义的第二页,您可以根据用户输入动态更改自定义侧栏。

相关问题