Skip to content

Instantly share code, notes, and snippets.

@jagedn
Created March 5, 2020 21:29
Show Gist options
  • Save jagedn/6e91b9a0584115e75b25ab17efb4f1c2 to your computer and use it in GitHub Desktop.
Save jagedn/6e91b9a0584115e75b25ab17efb4f1c2 to your computer and use it in GitHub Desktop.
Utilidad de Google Sheet para sortear entre los alumnos de una clase quién le toca salir a la pizarra a resolver un ejercicio
function onOpen(e) {
var ui = SpreadsheetApp.getUi();
ui.createAddonMenu().addItem('RandomAula', 'raffle').addToUi();
}
var urls = [
"https://media.giphy.com/media/3oriffRGkX9U7Tmphu/giphy.gif",
"https://media.giphy.com/media/3HGDE05UoQ0tmQpTzz/giphy.gif",
"https://media.giphy.com/media/THVQ8w1Yc2Eg8aUU0S/giphy.gif",
"https://media.giphy.com/media/euGKUsOE7FWMxIjmf9/giphy.gif"
]
function getRemains(){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var ret = [];
// Alumnos y el estado en A3D99
var range = ss.getRange("A3:D"+ss.getLastRow()).getValues();
for(var i=0; i<range.length; i++){
var row = range[i];
// una celda en blanco indica fin de alumnos
if( !row[0] ){
break
}
// una celda en blanco indica que no ha salido todavia
if( !row[1] ){
ret.push( [i,row[0],row[1]] )
}
}
return ret;
}
function getExercises(){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var ret = [];
// Ejercicios en columna E
var range = ss.getRange("E3:E"+ss.getLastRow()).getValues();
for(var i=0; i<range.length; i++){
var row = range[i];
if( !row[0] ){
break
}
ret.push( row[0] )
}
return ret;
}
// Ordenar random alumnos y elegir uno
function raffle( ){
var remains = getRemains();
var suertudoIndex = Math.floor(Math.random()*remains.length);
var suertudo = remains[suertudoIndex];
var exercises = getExercises()
var exercise = Math.floor(Math.random()*exercises.length);
var urlIndex = Math.floor(Math.random()*urls.length);
var url = urls[urlIndex];
var template = HtmlService.createTemplateFromFile('Dialog');
template.suertudo = suertudo;
template.exercise = exercise;
template.meme = url;
template.exerciseStr = exercises[exercise];
var html = template.evaluate();
var htmlOutput = HtmlService
.createHtmlOutput(html)
.setWidth(800)
.setHeight(600);
SpreadsheetApp.getUi().showModalDialog(htmlOutput, suertudo[1]);
}
// Invocado por el dialogo cuando el alumno index ha salido a la pizarra
function yepes(suertudoIndex, exercise){
suertudoIndex = parseInt(suertudoIndex);
var exercises = getExercises()
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
sheet.getRange(suertudoIndex+3,2).setValue(new Date());
sheet.getRange(suertudoIndex+3,3).setValue(exercises[exercise]);
}
// Invocado por el dialogo cuando el alumno index no ha venido a clase
function notPresent(suertudoIndex){
suertudoIndex = parseInt(suertudoIndex);
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
sheet.getRange(suertudoIndex+3,2).setValue(new Date());
sheet.getRange(suertudoIndex+3,3).setValue("AUSENTE. ELIMINAR CELDAS B Y C CUANDO VUELVA");
}
<script>
var suertudoIdx = <?=suertudo[0]?>;
var exercise = '<?=exercise?>';
function yepes(){
google.script.run.withSuccessHandler(google.script.host.close).yepes(suertudoIdx,exercise)
}
function notPresent(){
google.script.run.withSuccessHandler(google.script.host.close).notPresent(suertudoIdx)
}
</script>
<h1>
<?=exerciseStr?>
</h1>
<center>
<image src="<?=meme?>"/>
</center>
<p>
<div>
<input type="button" value="Hecho" onclick="yepes(suertudoIdx,exercise)" />
&nbsp;
<input type="button" value="No Presente" onclick="notPresent()" />
</div>
</p>
@jagedn
Copy link
Author

jagedn commented Mar 5, 2020

Instrucciones

En una hoja Google Sheet en blanco rellenala con los datos como los de la imagen. Respeta las columnas

image

  • La primera columna es para el nombre de los alumnos
  • La segunda se rellena automáticamente con la fecha en la que salió el alumno
  • La tercera con el ejercicio que le tocó (ver a continuación)
  • La cuarta es por si quieres añadir algun comentario de qué tal lo hizo

Las preguntas pueden ser tantas como se desee o una sólo. El sistema elegirá una aleatoria de entre ellas

  • abre el editor de secuencias de comandos ( Herramientas / Editor de secuencias)
  • Se abrirá una ventana con un editor de código. Reemplazalo el código por el de Codigo.gs
  • Desde el menú del editor de código crea un nuevo fichero HTML ( Archivo / Nuevo / Archivo HTML ) y llamalo Dialog.html
  • Reemplazalo por el código de Dialog.html
  • Salva los dos ficheros
  • Recarga la hoja con F5

Debería aparecer un menú nuevo en "Complementos" llamando "Random Aula" con una opción de submenú.

Seleccionalo y deberá aparecer un Diálogo con el nombre de un alumno elegido al azar junto con el ejercicio que le toca.

Si el alumno sale a la pizarra pulsa "Hecho", si no sale (ausencia, verguenza, ...) marca "No presente" y el sistema le anotará para que no vuelva a salir en la siguiente ronda.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment