Моя цель - создать портал, на котором я могу принять загрузку файлов в папку, названную после отправки человека, а затем записать их имя в электронную таблицу.Google Scripts Returning Undefined
Функция «uploadFiles()» загружает и упорядочивает закачки в новом файле. Однако, когда я запускаю функцию «saveToSpreadsheet()», она публикует «неопределенный» вместо того, чтобы извлекать данные формы из моей таблицы.
Я довольно новый JavaScript, и это мой первый проект, работающий в скрипте Google Apps. Прошу прощения за то, что я был новичком, когда спрашиваю: что вызывает это отсутствие связи между функциями?
HTML Форма
<form id="myForm">
<input type="text" name="artistName" placeholder="First and last name">
<input type="text" name="artTitle" placeholder="Title of submission">
<input type="text" name="yearProduced" placeholder="Year created">
<input type="text" name="medium" placeholder="Medium">
<input type="file" name="myFile">
<input type="submit" value="Upload File"
onclick="this.value='Uploading..';
google.script.run.withSuccessHandler(fileUploaded)
.uploadFiles(this.parentNode);
return false;">
</form>
<div id="output"></div>
<script>
function fileUploaded(status) {
document.getElementById('myForm').style.display = 'none';
document.getElementById('output').innerHTML = status;
}
</script>
Google Script File
function doGet(e) {
return HtmlService.createHtmlOutputFromFile('form.html');
}
function uploadFiles(form) {
try {
var dropbox = form.artistName.replace(/\s+/g, '-').toLowerCase();
var folder, folders = DriveApp.getFoldersByName(dropbox);
var artistName = form.artistName;
var artTitle = form.artTitle;
var yearProduced = form.yearProduced;
var medium = form.medium;
if (folders.hasNext()) {
folder = folders.next();
} else {
folder = DriveApp.createFolder(dropbox);
}
var blob = form.myFile;
var file = folder.createFile(blob);
file.setDescription("Created by " + artistName + ". " + artTitle + " in " + yearProduced + " in a medium of " + medium);
return "File uploaded successfully. Thanks, " + artistName + "!";
saveToSpreadsheet(artistName);
}
catch (error) {
return error.toString();
}
}
function saveToSpreadsheet(data) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[0];
var j = sheet.getLastRow();
var cell = sheet.getRange(1, 1);
var cellValue = sheet.getSheetValues(1, 1, 1, 1);
cell.setValue(data);
Logger.log(data);
}
Edit (это в конечном итоге решить мою проблему)
function doGet(e) {
return HtmlService.createHtmlOutputFromFile('form.html');
}
function uploadFiles(form) {
try {
var dropbox = form.artistName.replace(/\s+/g, '-').toLowerCase();
var folder, folders = DriveApp.getFoldersByName(dropbox);
var artistName = form.artistName;
var artTitle = form.artTitle;
var yearProduced = form.yearProduced;
var medium = form.medium;
var xyz = saveToSpreadsheet(artistName);
if (folders.hasNext()) {
folder = folders.next();
} else {
folder = DriveApp.createFolder(dropbox);
}
var blob = form.myFile;
var file = folder.createFile(blob);
file.setDescription("Created by " + artistName + ". " + artTitle + " in " + yearProduced + " in a medium of " + medium);
return "File uploaded successfully. Thanks, " + artistName + "!";
saveToSpreadsheet(xyz);
}
catch (error) {
return error.toString();
}
}
function saveToSpreadsheet(data) {
var ss = SpreadsheetApp.openById('mysheetID');
var sheet = ss.getSheets()[0];
var j = sheet.getLastRow();
var cell = sheet.getRange(1, 1);
var cellValue = sheet.getSheetValues(1, 1, 1, 1);
cell.setValue(data);
Logger.log(data);
}
В случае, если это не строка: 'вар nameData = form.myName;' быть: 'вар nameData = form.myFile;' " myFile "not" myName " –
Привет, Сэнди. Спасибо за ваш комментарий. Цель запроса по имени файла состоит в том, что каждый файл имеет имя после владельца работы. Чтобы быть более семантическим, я должен, вероятно, изменить «nameData» на «folderName» –
Я только что заметил: 'var blob = form.myFile;' Именно это я и искал. Однако я не вижу элемент HTML с именем 'myName'. –