Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 根据谷歌应用程序脚本中的答案创建表单问题_Javascript_Google Apps Script_Google Forms - Fatal编程技术网

Javascript 根据谷歌应用程序脚本中的答案创建表单问题

Javascript 根据谷歌应用程序脚本中的答案创建表单问题,javascript,google-apps-script,google-forms,Javascript,Google Apps Script,Google Forms,我有一个谷歌表单给我们的销售同事,让他们选择自己的名字,他们负责的国家,然后回答几个问题(这些问题总是一样的) 姓名列表和相关国家/地区保存在电子表格中。我使用此列表填写姓名的列表项,以及每个同事的国家/地区列表项 目前,我有一个欢迎页面,其中有两个列表项:名称和产品。 选择名称并单击“继续”后,表单跳转到相应的页面,在该页面中,国家列表项已预先填充了国家 我的问题是,这样我总是有一个很长的表单,尽管用户只能看到两个页面。此外,指定的工作表对每个问题都有单独的列 是否可以根据所选名称“动态”生成

我有一个谷歌表单给我们的销售同事,让他们选择自己的名字,他们负责的国家,然后回答几个问题(这些问题总是一样的)

姓名列表和相关国家/地区保存在电子表格中。我使用此列表填写姓名的列表项,以及每个同事的国家/地区列表项

目前,我有一个欢迎页面,其中有两个列表项:名称和产品。 选择名称并单击“继续”后,表单跳转到相应的页面,在该页面中,国家列表项已预先填充了国家

我的问题是,这样我总是有一个很长的表单,尽管用户只能看到两个页面。此外,指定的工作表对每个问题都有单独的列

是否可以根据所选名称“动态”生成第二页

更新:

这是我的职责。通过传递所选名称或至少将生成的问题设置为将响应保存到电子表格中的同一列,从而“按需”生成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==================
}
函数createForm(){
//名字
变量名称=['A','B','C','D','E','F','G','H','I','J'];
var全名=['先生Z A'、'先生Y B'、'先生X C'、'女士W D'、'先生V E'、'女士U F'、'先生T G'、'先生S H'、'先生R I'、'先生Q J'];
var Products=[‘产品1’、‘产品2’];
var questionBlock={};
var form=FormApp.create('Vertriebsländer und Zulassungsplan 2015');
//第1页
form.setTitle(“formTitle”)
.setDescription('请填写以下调查');
form.hasRespondAgainLink();
form.canEditResponse();
var lName=form.addListItem()
.setTitle('请选择您的姓名:')
.setRequired(true);
var choicesName=lName.getChoices();
choicesName=[];
var lpproduct=form.addListItem()
.setChoiceValues(产品)
.setTitle('请选择产品:')
.setRequired(true);
//问题栏页
对于(a=0;a0)
{          
push(questionBlock[('lccountries'+name[i])).createChoice(values[k][j]);
问题块[('lCountries'+名称[i])。设置选项(选项);
}
}
}
}
}
//国家/地区选择下拉列表已填充==================
}

我认为您无法编辑当前打开的表单,也无法显示或隐藏问题。当然,你可以用HTML来做,但我不认为你可以用谷歌的形式来做。您可以从代码中编辑当前表单,但随后需要保存它,关闭表单,然后让用户重新打开它

根据文档,您可以拥有表单的侧栏


因此,您可以显示自定义侧栏,并根据用户的响应使用HTML显示或隐藏字段。因此,我的建议是,表单中没有自定义的第二页,而是有一个根据用户输入动态更改的自定义侧栏。

请发布一些您已经处理过的代码。我已经编辑了初始问题,以包含源代码。我考虑使用GetItemResponses,但我无法真正理解如何调试它,因为调试时它总是空的。(但也许我就是不明白这整件事)