使用谷歌应用脚本&谷歌网站,我正在尝试写下一个表格,并在电子表格中得到答案。 这是我现在的工作:
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可见!
我的第二个问题是:如何获得不同问题的价值? 我想在现有的电子表格中写下不同用户的答案,以及选择。但是当我试图找到一种获得用户答案的方法时,我就陷入了困境。
如果你有时间,谢谢你的帮助, 文森特
答案 0 :(得分:1)
radioButtons在GAS中有点棘手...要按照自己的意愿工作,它们需要具有相同的名称,但如果它们具有相同的名称,则会在处理函数中返回无法读取的结果,即e .parameter.radioButtonName不可用,因为它们没有区别。 虽然有简单的解决方法。下面是一个示例,说明如何使用clientHandlers和(可见或不可见)textBox来处理它。还有一个处理“反向过程”的功能,即设置来自另一个小部件的数据的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;
}
从电子表格中运行此测试,您将得到以下内容:
编辑:
根据您的评论,这是建立这样一个多选择问题的有效方法,here is the test 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;
}