čtvrtek 27. dubna 2017

Jak mně Bernd Wichern ušetřil pár hodin

Včera jsem se po dlouhé době opět pustil do dotazníku v Google forms. Měl jsem celkem devět otázek, z nichž každá měla 11 stejných podotázek. Vážně se mi nechtělo vše kopírovat položku po položce nebo dokonce vše ručně zadávat. Napadlo mě konečně použít také nějaký ten skript. A ejhle našel jsem ;) 
Stránku, která je na obrázku, jsem potřeboval devětkrát zkopírovat. Netušil jsem, že je to pomocí scriptu tak snadné.
Ukázka stránky formuláře

V nabídce klikněte na "Nástroje" a zvolte "Editor skriptů".

Prázdné okno pro vložení scriptu

 SCRIPT

//Global Variables

var form = FormApp.getActiveForm();
var items = form.getItems();


// Menu

function createMenu() {
  FormApp.getUi()
      .createMenu('Menu')
      .addItem('Duplicate Page', 'duplicatePage')
      .addToUi();
}

function duplicatePage() {

  // Dialog
  var ui = FormApp.getUi();

  var result = ui.prompt('Select page','Which page should be duplicated?',ui.ButtonSet.OK_CANCEL);
  if (result.getSelectedButton() == ui.Button.OK) {

  var result2 = ui.prompt('How often','How often should it be duplicated?',ui.ButtonSet.OK_CANCEL);

  if (result2.getSelectedButton() == ui.Button.OK) {


  // Process the user's response.
  var page = result.getResponseText();
  var amount = result2.getResponseText();
  
  // Fetch Pages
  var pages = getPages();
  Logger.log(pages);

  var start = items[pages[page-1]].getIndex();
  var end = items[pages[page]-1].getIndex();

  // Duplicates entries on the page

  if (page == 1){
  var title = form.getTitle();
  var description = form.getDescription();

  for(var j=0;j<amount;j++){

  form.addPageBreakItem()
    .setTitle(title)
    .setHelpText(description);
  for(var i=0;i<pages[1];i++){

    var item = items[i]
    item.duplicate();
    }
  }

  } else {

  for(var j=0;j<amount;j++){
  for(var i=start;i<=end;i++){
    var item = items[i];
    item.duplicate();
    }
  }
  }
  }
  }
}

function getPages() {
  // Returns an Array with Pagebreak positions and first and last index in form.getItems()

  var pages = new Array();
  pages[0]=0;
  for(var i=0;i<items.length;i++) {

  if (items[i].getType() == 'PAGE_BREAK'){
  pages.push(i);
  }
  }
  pages.push(items.length);
  return pages;
}


Ve scriptu jsou tři funkce.

Funkce scriptu
Po vložení scriptu již stačí autorizovat stránku, vybrat funkci a spustit script.
Zvolíte stránku k duplikování, zadáte počet kopií a je to ;)
Zadejte číslo zdrojové stránky
Nastavte počet kopií

Nyní už stačí počkat pár okamžiků až se stránky nakopírují a přepsat pouze záhlaví.

Díky Bernd Wichern ;)