有没有办法为谷歌表单创建一个脚本来检查电子表格?

时间:2013-08-28 00:33:28

标签: forms google-apps-script

我正在计划我的儿子们的第一个生日聚会。我住在夏威夷,所以当你邀请某人时,有时他们会带他们的朋友,姐妹,表兄弟,阿姨,叔叔,狗等......但是因为我们为我的儿子聚会预留的场地座位数量有限,我们不能只是有额外的人来。另外,我们是按头/座位付款。

所以说,我有一个我的客人名单的电子表格,并列有我限制每个邀请的席位数量。我也想为每个邀请分配一个代码。

例如
姓氏|座椅|代码号 家庭A | 3个座位| ABC123
家庭B | 5个座位| DEF456

因此,如果我在邀请函上放置一个qr代码,并为每个邀请/家庭提供他们的代码,

我希望谷歌表单允许每个收件人输入他们的代码,并希望脚本能够使用他们输入的代码检查我的电子表格,以便表单知道收件人有多少席位需要保留。

A家庭只能预订3个座位而且不能更多,而B家庭只能预订5个座位而不能更多。

有办法做到这一点吗?

1 个答案:

答案 0 :(得分:0)

您无法在Google表单字段中输入代码并立即运行脚本功能。因此杀死能够检查另一个字段的验证。只有在提交表单后才能回复,您可以查看值是什么。

如果您坚持使用单个Google表单,您可以编写一个脚本来监控提交内容并发送电子邮件或让他们知道他们预订了太多人(事后)。还可以编写一个脚本,为每个已将最大来宾编程到下拉列表中的邀请创建单独的表单。然后发送每个邀请他们自己的表格网址。

另一种方法是使用2个UI服务之一编写自己的应用程序,其作用类似于表单。在那里,您可以与用户输入和所需的验证进行交互。启动UiApp示例...

var MAX = [];
MAX['123'] = [2];
MAX['456'] = [3];

function doGet() {
  var app = UiApp.createApplication();
  var panel = app.createVerticalPanel();
  var code = app.createTextBox().setId('code').setName('code');
  var guests = app.createTextBox().setId('guests').setName('guests');
  var submit = app.createButton('SUBMIT').setId('submit').setEnabled(false);
  var status = app.createLabel('', false).setId('status');

  var handler = app.createServerHandler('checkGuests').addCallbackElement(panel);
  guests.addValueChangeHandler(handler);

  handler = app.createServerHandler('submit').addCallbackElement(panel);
  submit.addClickHandler(handler);

  panel.add(code).add(guests).add(submit).add(status);
  app.add(panel);
  return app;
}

function checkGuests(e) {
  var app = UiApp.getActiveApplication();
  var code = e.parameter.code;
  var guests = e.parameter.guests;

  if (code == '' || code == undefined) { 
    app.getElementById('submit').setEnabled(false)
    app.getElementById('status').setText('Please enter your code.'); }
  else if (parseInt(guests) <= MAX[code]) {
    app.getElementById('submit').setEnabled(true);
    app.getElementById('status').setText(''); }
  else { 
    app.getElementById('submit').setEnabled(false)
    app.getElementById('status').setText('Whoops, too many people!'); }
  return app;
}

function submit(e) {
}