0

使用谷歌应用脚​​本和谷歌网站,我试图写下一个表格并在电子表格中获得答案。这是我现在的工作:

    function doGet(){

var app = UiApp.createApplication().setTitle('Radio Button Demo');

var radio1 = app.createVerticalPanel();
var radio11 = app.createRadioButton('group1','Oui').setName('oui1').setId('oui1');
var radio12 = app.createRadioButton('group1','Non').setName('non1').setId('non1');
radio1.add(radio11).add(radio12);
app.add(radio1);

var radio2 = app.createVerticalPanel().setId('question2').setVisible(false);
var radio21 = app.createRadioButton('group2','Oui').setName('oui2').setId('oui2');
var radio22 = app.createRadioButton('group2','Non').setName('non2').setId('non2');
radio2.add(radio21).add(radio22);
app.add(radio2);

var radio3 = app.createVerticalPanel().setId('question3').setVisible(false);
var radio31 = app.createRadioButton('group3','Oui').setName('oui3').setId('oui3');
var radio32 = app.createRadioButton('group3','Non').setName('non3').setId('non3');
radio3.add(radio31).add(radio32);
app.add(radio3);

var radio4 = app.createVerticalPanel().setId('question4').setVisible(false);
var radio41 = app.createRadioButton('group4','Cool').setName('oui4').setId('oui4');
var radio42 = app.createRadioButton('group4','Or not').setName('non4').setId('non4');
radio4.add(radio41).add(radio42);
app.add(radio4);

// handler to make value of question 1 change
var handler11 = app.createServerValueChangeHandler('showstatus1_1');
handler11.addCallbackElement(radio1);
radio11.addValueChangeHandler(handler11);

var handler12 = app.createServerValueChangeHandler('showstatus1_2');
handler12.addCallbackElement(radio1);
radio12.addValueChangeHandler(handler12);

// handler to make value of question 2 change
var handler21 = app.createServerValueChangeHandler('showstatus2_1');
handler21.addCallbackElement(radio2);
radio21.addValueChangeHandler(handler21);

var handler22 = app.createServerValueChangeHandler('showstatus2_2');
handler22.addCallbackElement(radio2);
radio22.addValueChangeHandler(handler22);

// handler to make value of question 3 change
var handler31 = app.createServerValueChangeHandler('showstatus3_1');
handler31.addCallbackElement(radio3);
radio31.addValueChangeHandler(handler31);

var handler32 = app.createServerValueChangeHandler('showstatus3_2');
handler32.addCallbackElement(radio3);
radio32.addValueChangeHandler(handler32);

// handler to make value of question 4 change
var handler41 = app.createServerValueChangeHandler('showstatus4_1');
handler41.addCallbackElement(radio4);
radio41.addValueChangeHandler(handler41);

var handler42 = app.createServerValueChangeHandler('showstatus4_2');
handler42.addCallbackElement(radio4);
radio42.addValueChangeHandler(handler42);


// functions to change values of question 1
function showstatus1_1(e){
  var app = UiApp.getActiveApplication();
  var radioValue = e.parameter.oui1 
  app.getElementById('non1').setValue(false);
  app.getElementById('question2').setVisible(true);
  return app;
}

function showstatus1_2(e){
  var app = UiApp.getActiveApplication();
  var radioValue = e.parameter.non1;
  app.getElementById('oui1').setValue(false);
  app.getElementById('question2').setVisible(true);
  return app;
}

// functions to change values of question 2
function showstatus2_1(e){
  var app = UiApp.getActiveApplication();
  var radioValue = e.parameter.oui2 
  app.getElementById('non2').setValue(false);
  return app;
}

function showstatus2_2(e){
  var app = UiApp.getActiveApplication();
  var radioValue = e.parameter.non2;
  app.getElementById('oui2').setValue(false);
  return app;
}

// functions to change values of question 3
function showstatus3_1(e){
  var app = UiApp.getActiveApplication();
  var radioValue = e.parameter.oui3 
  app.getElementById('non3').setValue(false);
  return app;
}

function showstatus3_2(e){
  var app = UiApp.getActiveApplication();
  var radioValue = e.parameter.non3;
  app.getElementById('oui3').setValue(false);
  return app;
}

// functions to change values of question 4
function showstatus4_1(e){
  var app = UiApp.getActiveApplication();
  var radioValue = e.parameter.oui4 
  app.getElementById('non4').setValue(false);
  return app;
}

function showstatus4_2(e){
  var app = UiApp.getActiveApplication();
  var radioValue = e.parameter.non4;
  app.getElementById('oui4').setValue(false);
  return app;
}

我的第一个问题是如何根据问题 1 和 2 的答案使问题 3 和 4 可见。我已经根据 1 个问题的答案找到了如何做到这一点,但我遇到了多个问题。例如:如果答案是“Oui”和“Oui”,则使问题 3 可见,否则使问题 4 可见!

我的第二个问题是:如何获得不同问题的值?我想在现有的电子表格中写下不同用户的答案以及选择。但是当我试图找到一种获取用户答案的​​方法时,我被困住了。

谢谢你有时间帮助我,文森特

4

1 回答 1

1

单选按钮在 GAS 中有点棘手……要正常工作,它们需要具有相同的名称,但如果它们具有相同的名称,它们会在处理函数中返回一个无法读取的结果,即 e.parameter。 radioButtonName 不可用,因为它们没有区别。不过有一些简单的解决方法。这是一个示例,展示了如何使用 clientHandlers 和(可见或不可见)文本框来处理它。还有一个处理“反向过程”的函数,即根据来自另一个小部件的数据设置 radioButtons 值。这应该可以帮助您回答您的两个问题。

function radiotest() {
  var app = UiApp.createApplication();
  var panel = app.createVerticalPanel();
  var radioValue = app.createTextBox().setId('radioValue');
      radioValue.setId("radioValue").setName("radioValue");
  var listhandler = app.createServerHandler('listhandler').addCallbackElement(panel); 
  var list = app.createListBox().addChangeHandler(listhandler).setName('list');    
  for(var i = 1; i < 10; i++){
    var name = 'choice '+i;
    list.addItem('Activate '+name,name);
    var handler = app.createClientHandler().forTargets(radioValue).setText(name);
    panel.add(app.createRadioButton('radioButtonGroup',name).addValueChangeHandler(handler).setId(name));
  }
  panel.add(radioValue);
  var getit=app.createButton("Valide").setId("val");
  panel.add(getit).add(list);             
  var handler = app.createServerHandler("valide");
  handler.addCallbackElement(panel);
  getit.addClickHandler(handler);
  app.add(panel);
SpreadsheetApp.getActiveSpreadsheet().show(app);// show app 
}
//
function valide(e){ ;// This function is called when key "validate" is pressed 
  var sh = SpreadsheetApp.getActiveSheet();
  var RadioButton = e.parameter.radioValue;               
  sh.getRange('A1').setValue(RadioButton);
  var app = UiApp.getActiveApplication();
  return app;
}​

function listhandler(e){ ;// This function is called when listBox is changed
  var sh = SpreadsheetApp.getActiveSheet();
  var app = UiApp.getActiveApplication();
  var listvalue = e.parameter.list;
  var radioValue = app.getElementById('radioValue').setValue(listvalue);
  sh.getRange('A2').setValue(listvalue);
  var radiobutton = app.getElementById(listvalue);
  radiobutton.setValue(true);
return app;
}​

从电子表格运行这个测试,你会得到这样的结果:

在此处输入图像描述


编辑 :

根据您的评论,这是构建此类多项选择题的有效方法,这是测试应用程序

function doGet() {
  var app = UiApp.createApplication().setTitle('test Questionnaire');
  var panel = app.createVerticalPanel();
  var sHdlr = app.createServerHandler('react').addCallbackElement(panel);
  var questions = ['<b>Question Numéro 1 :</b><br>Faites votre choix parmis les 4 possibilités suivantes','<b>Question 2</b><br>Encore un fois, faites votre choix','<b>Question 3</b><br>encore un effort...','<b>Question 4</b><br>vous y êtes presque...'];
  var Qitems = [['choix1 de Q1','choix2 de Q1','choix3 de Q1','choix4 de Q1'],['choix1 de Q2','choix2 de Q2','choix3 de Q2','choix4 de Q2'],
  ['choix1 de Q3','choix2 de Q3','choix3 de Q3','choix4 de Q3'],['choix1 de Q4','choix2 de Q4','choix3 de Q4','choix4 de Q4']];
  var Qpanel = [];
  for (var n=0 ; n<questions.length ; ++n){
    var Qval = app.createTextBox().setId('Qvalue'+n).setName('Qvalue'+n).setVisible(false);
    Qpanel[n] = app.createVerticalPanel().setId('QP'+n).setVisible(false).add(app.createHTML(questions[n])).add(Qval).setStyleAttribute('padding','10px');
    panel.add(Qpanel[n]);
    for(var q=0;q<Qitems[n].length;++q){
      var name = Qitems[n][q]
      var handler = app.createClientHandler().forTargets(Qval).setText(name);
      Qpanel[n].add(app.createRadioButton('radioButtonQ'+n,name).addClickHandler(handler).setId(name).addClickHandler(sHdlr));
    }
    }
    app.add(panel);
    Qpanel[0].setVisible(true);
    return app;
}

function react(e){
  var app = UiApp.getActiveApplication();
  var source = e.parameter.source;
  var answer = [];
  for(var n = 0; n < 4 ; ++n){
    answer[n] = e.parameter['Qvalue'+n];
    Logger.log('answer '+ (n+1) + ' = '+answer[n]+' source = '+source)
    }
      if(answer[0]=='choix1 de Q1'){app.getElementById('QP'+1).setVisible(true)}
      if(answer[1]=='choix1 de Q2'||answer[1]=='choix3 de Q2'){app.getElementById('QP'+2).setVisible(true)}
      if(answer[2]=='choix1 de Q3'||answer[2]=='choix3 de Q3'){app.getElementById('QP'+3).setVisible(true)}
      if(answer[3]=='choix1 de Q4'){
      app.add(app.createHTML('YESSSSSSSSS ... !!<br>Vous avez réussi !<br> vos réponses sont les suivantes : '+answer.join('  +  ')).setStyleAttribute('padding','20px'))
      }
  return app;
}
于 2013-06-20T16:05:32.240 回答