Нажимайте ссылки, созданные в электронной таблице Google в JS (Google AppScripts)

#javascript #google-apps-script

Вопрос:

Я использую скрипт для автоматизации создания форм. Он в основном перебирает список элементов, так как каждый из них должен иметь ссылку на разные формы. Как я могу сохранить ссылки, созданные для каждой группы, в электронной таблице Google?

Я хотел бы иметь электронную таблицу таким образом:

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

Вот мой код:

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


function createForm(group) {  
   // create amp; 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)
 

Редактировать:

При реализации этого возникает следующая ошибка: ошибка типа: infoArray.join не является функцией

 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("rn");
        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)
 

Комментарии:

1. Где размещен скрипт? Внутри электронной таблицы? Внутри какой-то формы? Или это отдельный скрипт в AppsScript?

2. Он помещен в отдельный файл в AppScript. Я попробую твое решение ниже, тай

Ответ №1:

Не уверен, правильно ли я понимаю вашу задачу. Итак, если у вас есть два массива: group и links вы можете добавить их содержимое в электронную таблицу таким образом:

 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
}
 

И я не понимаю, что делает эта функция в вашем коде:

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

Он получает group (массив?) и преобразует его в ноль var group = 0 , а затем появляется переменная i и т. Д. Для меня все это выглядит как ошибка.

Наверное, я не знаю, должно быть:

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

Комментарии:

1. Спасибо, что это сработало! В коде была ошибка, но я отредактировал его с правильным синтаксисом.