Home > Blockchain >  Push links generated to Google SpreadSheet in JS (Google AppScripts)
Push links generated to Google SpreadSheet in JS (Google AppScripts)

Time:10-08

I am using a script to automate form generation. It basically loops over a list of elements, since each of them should have a different forms link. How can I store the links generated corresponding to each group in a google spreadsheet?

I would like to have a spreadsheet in this way:

Group  Link
138    https://docs.google.com/forms/idForm138
139    https://docs.google.com/forms/idForm139

Here's my code:

var lista_url=[]
var group=[137, 138, 139]


function createForm(group) {  
   // create & name Form  
   var item = "Speaker Information Form";  
   var form = FormApp.create(item)  
       .setTitle(item);  
   
   // single line text field  
   item = group;  
   form.addTextItem()  
       .setTitle(item)  
       .setRequired(true);  
   
   // multi-line "text area"  
   item = "Short biography (4-6 sentences)";  
   form.addParagraphTextItem()  
       .setTitle(item)  
       .setRequired(true);  
   
   // radiobuttons  
   item = "Handout format";  
   var choices = ["1-Pager", "Stapled", "Soft copy (PDF)", "none"];  
   form.addMultipleChoiceItem()  
       .setTitle(item)  
       .setChoiceValues(choices)  
       .setRequired(true);  
   
   // (multiple choice) checkboxes  
   item = "Microphone preference (if any)";  
   choices = ["wireless/lapel", "handheld", "podium/stand"];  
   form.addCheckboxItem()  
       .setTitle(item)  
       .setChoiceValues(choices); 



    var url_form= Logger.log('Published URL: '   form.getPublishedUrl());
    Logger.log('Group: ' group)
    lista_url.push(url_form)
  
 }



function generate_Form_links(group){

    group.forEach(function(item, index){
    console.log(item, index)
    createForm(item)
  }
}


generate_Form_links(group)

EDIT:

Implementing this raises this error: TypeError: infoArray.join is not a function

function excelformat(lista_url) {
        var result_table = lista_url
        var lineArray = [];
        result_table.forEach(function(infoArray, index) {
            var line = infoArray.join(" \t");
            lineArray.push(index == 0 ? line : line);
        });
        var csvContent = lineArray.join("\r\n");
        var excel_file = document.createElement('a');
        excel_file.setAttribute('href', 'data:application/vnd.ms-excel;charset=utf-8,'   encodeURIComponent(csvContent));
        excel_file.setAttribute('download', 'Visitor_History.xls');
        document.body.appendChild(excel_file);
        excel_file.click();
        document.body.removeChild(excel_file);
    }

excelformat(lista_url)

CodePudding user response:

Not sure if I understand your task correctly. So, if you have the two arrays: group and links you can add their content in spreadsheet this way:

var group = [138, 139];
var links = ['https://docs.google.com/forms/idForm138','https://docs.google.com/forms/idForm139'];

function save_arrays_to_spreadsheet(group, links) {
  var ss = SpreadsheetApp.openById(ss_id); // <-- put the spreadsheet ID here
  var sheet = ss.getSheets()[0];           // let it be a first sheet 
  for (var i in group) sheet.appendRow([group[i], links[i]]); // add a row
}

And I don't understand what this function in your code is doing:

function generate_Form_links(group){
  for (var group=0; group<=group.length ; group=i  ){
    createForm(group) //call our function for each value in list
  }
}

It gets group (an array?) and converts it into zero var group = 0, and then there appears the variable i, etc. It all looks like an error to me.

Probably, I don't know, there should be:

function generate_Form_links(group) {
  for (var i=0; i<=group.length; i  ) { createForm(group[i]) }
}
  • Related