#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. Спасибо, что это сработало! В коде была ошибка, но я отредактировал его с правильным синтаксисом.