¿Cómo generar script de formulario existente de google?

publicado por: Anonymous

Con el siguiente script, se crear un formulario nuevo

// Create a new form, then add a checkbox question, a multiple choice question,
// a page break, then a date question and a grid of questions.
var form = FormApp.create('New Form');
var item = form.addCheckboxItem();
item.setTitle('What condiments would you like on your hot dog?');
item.setChoices([
        item.createChoice('Ketchup'),
        item.createChoice('Mustard'),
        item.createChoice('Relish')
    ]);
form.addMultipleChoiceItem()
    .setTitle('Do you prefer cats or dogs?')
    .setChoiceValues(['Cats','Dogs'])
    .showOtherOption(true);
form.addPageBreakItem()
    .setTitle('Getting to know you');
form.addDateItem()
    .setTitle('When were you born?');
form.addGridItem()
    .setTitle('Rate your interests')
    .setRows(['Cars', 'Computers', 'Celebrities'])
    .setColumns(['Boring', 'So-so', 'Interesting']);
Logger.log('Published URL: ' + form.getPublishedUrl());
Logger.log('Editor URL: ' + form.getEditUrl());

Pregunta:

¿Cómo lograr el efecto inverso, es decir a partir de un formulario existente obtener el script de generación?

solución

Tal cómo dice Rubén, no se cuenta con una forma genérica para realizar ingeniería inversa de formulario a script, pero se puede escribir un Script ad hoc utilizando los métodos getActiveForm() y getItems(), a continuación coloco un script ad hoc inspirado en las siguientes respuestas:

  1. Google api – how do you get the text in Forms?
  2. How to Edit exisiting google form item through google script

Script:

function generarScript(){
  // Obtener el formulario activo
  var form = FormApp.getActiveForm();
  // Obtener todos los items
  var todosLosItems = form.getItems();

  // Cabecera formulario
  Logger.log('var form = FormApp.create('Nuevo fomulario');');
  Logger.log('var item = ');


  //Obtener las propiedades de cada ítem
  for (var i=0; i<todosLosItems.length;i++){
    var unItem = todosLosItems[i];    

    // La siguiente rutina se debe desarrollar y personalizar para cada tipo de item, : CHECKBOX, MULTIPLE_CHOICE, PAGE_BREAK, DATE, GRID, etc
    // ################# CHECKBOX ###################### //
    if (unItem.getType()===FormApp.ItemType.CHECKBOX) {
      Logger.log('form.addCheckboxItem();');
      Logger.log('item.setTitle(''+unItem.getTitle()+'')');
      Logger.log('item.setChoices([');
      var itemTipoCheckBoxOpciones = unItem.asCheckboxItem().getChoices();
      for (var j=0;j<itemTipoCheckBoxOpciones.length;j+=1){
        Logger.log('        item.createChoice(''+itemTipoCheckBoxOpciones[j].getValue()+'')');
        if((j+1)<itemTipoCheckBoxOpciones.length){
          Logger.log(',');
        };
      };
      Logger.log('    ]);');
    };

    // ################# MULTIPLE_CHOICE ###################### //
    if (unItem.getType()===FormApp.ItemType.MULTIPLE_CHOICE) {
      Logger.log('form.addMultipleChoiceItem()');
      Logger.log('    .setTitle(''+unItem.getTitle()+'')');
      Logger.log('    .setChoiceValues([');
      var itemTipoMultipleChoiceOptions = unItem.asMultipleChoiceItem().getChoices();
      for (var j=0;j<itemTipoMultipleChoiceOptions.length;j+=1){
        Logger.log('''+itemTipoMultipleChoiceOptions[j].getValue()+''');
        if((j+1)<itemTipoMultipleChoiceOptions.length){
          Logger.log(',');
        };
      };
      Logger.log('])');      
    };

    // ################# XXXX ###################### //

  }

  //Pie del formulario
  Logger.log('Logger.log('Published URL: ' + form.getPublishedUrl());');
  Logger.log('Logger.log('Editor URL: ' + form.getEditUrl());');
};

Para ver resultado: Ctrl + Intro.

introducir la descripción de la imagen aquí

Copiar texto y realizar limpieza para obtener finalmente:

var form = FormApp.create('Nuevo fomulario');
var item = 
form.addCheckboxItem();
item.setTitle('What condiments would you like on your hot dog?')
item.setChoices([
        item.createChoice('Salsa de tomate')
,
        item.createChoice('Mustard')
,
        item.createChoice('Relish')
    ]);
form.addMultipleChoiceItem()
    .setTitle('Do you prefer cats or dogs?')
    .setChoiceValues([
'Cats'
,
'Dogs'
])
Logger.log('Published URL: ' + form.getPublishedUrl());
Logger.log('Editor URL: ' + form.getEditUrl());

¿Cual es la Utilidad?

Una forma de uso sería para reciclar preguntas de algún formulario existente.

Véase también

Auto-generating Google Forms

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *