2016-05-02 3 views
0

Моя цель - создать портал, на котором я могу принять загрузку файлов в папку, названную после отправки человека, а затем записать их имя в электронную таблицу.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); 
} 
+0

В случае, если это не строка: 'вар nameData = form.myName;' быть: 'вар nameData = form.myFile;' " myFile "not" myName " –

+0

Привет, Сэнди. Спасибо за ваш комментарий. Цель запроса по имени файла состоит в том, что каждый файл имеет имя после владельца работы. Чтобы быть более семантическим, я должен, вероятно, изменить «nameData» на «folderName» –

+0

Я только что заметил: 'var blob = form.myFile;' Именно это я и искал. Однако я не вижу элемент HTML с именем 'myName'. –

ответ

1

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

Codigo.gs

function doGet(e) { 
    return HtmlService.createHtmlOutputFromFile('subirCorreo.html') 
      .setSandboxMode(HtmlService.SandboxMode.NATIVE); 
} 

function uploadFiles(form) { 

    try { 

    // FOLDER ID 
    var id= "FOLDERID"; 

    var carpeta = DriveApp.getFolderById(id); 

    var blob = form.myFile;  
    var file = carpeta.createFile(blob);  

    file.setDescription("Subido por " + Session.getActiveUser().getEmail()); 

    // Esta linea es por si quiere tipo enlace 
    // return "El archivo se subio correctamente: <br> <br>" + "<a href="+file.getUrl()+">"+file.getUrl()+"</a>" ; 

    return "El archivo se subio correctamente: <br> <br>" + file.getUrl(); 

    } catch (error) { 
    return error.toString(); 
    } 

} 

function uploadFilesMail(form) { 

    try { 

    var id= "FOLDERID"; 

    var carpeta = DriveApp.getFolderById(id); 

    var correo = form.myEmail; 

    var blob = form.myFile;  
    var file = carpeta.createFile(blob).setName("Archivo de: "+correo);  

    file.setDescription("Subido por " + Session.getActiveUser().getEmail()); 

    // Esta linea es por si quiere tipo enlace 
    // return "El archivo se subio correctamente: <br> <br>" + "<a href="+file.getUrl()+">"+file.getUrl()+"</a>" ; 

    return "El archivo se subio correctamente: <br> <br>" + file.getUrl(); 

    } catch (error) { 
    return error.toString(); 
    } 

} 

subir.html

<!-- Se incluye bootstrap --> 
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css"> 

<style> 
    form { text-align: center ; } 
    input { margin: auto;} 
    div { text-align: center ;font-weight: bold; color:#3644FF; } 
</style> 

<script> 

    function subirArchivo() { 
    google.script.run 
     .withSuccessHandler(fileUploaded) 
     .uploadFiles(document.getElementById("form")); 
    return false; 
    } 

    function fileUploaded(status) { 
    document.getElementById('form').style.display = 'none'; 
    document.getElementById('resultado').innerHTML = status; 
    } 

</script> 

<form id="form"> 

<h1> Subir archivo </h1> 

<input type="file" name="myFile"> <br> 

    <input class="btn btn-primary" type="submit" id="uploadFile" value="Subir archivo" 
     onclick="this.value='Subiendo..';subirArchivo();"> 

</form> 

<br> 
<br> 
<br> 
<br> 

<!-- Here the results of the form submission will be displayed --> 
<div id="resultado"> 

</div> 
Смежные вопросы