Mein Ziel ist es, ein Portal zu erstellen, in dem ich Datei-Uploads in einen Ordner akzeptieren kann, der nach der Person benannt ist, die die Daten übermittelt, und deren Namen in einer Tabelle protokolliert.Google Scripts Returning Undefined
Die Funktion "uploadFiles()" lädt und uploadet die Uploads in eine neue Datei. Wenn ich jedoch die Funktion "saveToSpreadsheet()" ausführe, wird ein "undefined" veröffentlicht, anstatt irgendwelche Formulardaten aus meiner Tabelle zu ziehen.
Ich bin ziemlich neu JavaScript und das ist mein erstes Projekt innerhalb von Google Apps Script, bitte entschuldigen Sie meine Anfängerfahrung, wenn ich frage: Was verursacht diesen Mangel an Kommunikation zwischen Funktionen?
HTML-Formular
<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-Datei
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 (das ist mein Problem endete Lösung)
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);
}
Sollte nicht diese Zeile: 'var nameData = form.myName;' sein: 'var nameData = form.myFile;' " myFile "nicht" meinName " –
Hallo, Sandy. Vielen Dank für Ihren Kommentar. Der Zweck der Abfrage nach Name der Datei ist, weil jede Datei nach dem Besitzer der Arbeit benannt ist. Um semantischer zu sein, sollte ich "nameData" wahrscheinlich in "folderName" ändern. –
Ich habe gerade bemerkt: 'var blob = form.myFile;' Das ist, was ich gesucht habe. Das HTML-Element mit dem Namen 'myName' wird jedoch nicht angezeigt. –