5

Ich habe eine Web App entwickelt mit Google App Script HtmlService und aus dem HTML-Formular, Bestückung Excel-Blatt im Google Drive mit SpreadsheetApp. Und ein anderer Abschnitt ruft ContentService auf, um Daten als Excel-Datei herunterzuladen.Google App Skript ContentService downloadAsFile funktioniert nicht

function doGet(e) { 
    // Read excel sheet 
    //getAppFile(); 
    // Render the application from HTML template 
    return HtmlService.createTemplateFromFile('index').evaluate() 
    .setTitle('Go Smart') 
    .setSandboxMode(HtmlService.SandboxMode.IFRAME); 
} 

function downloadDoubleQuateCsvFile() { 
    var sheetId = PropertiesService.getScriptProperties().getProperty('sheetId'); 
    var ss = SpreadsheetApp.openById(sheetId).getActiveSheet(); 
    //var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); 
    var maxColumn = ss.getLastColumn(); 
    var maxRow = ss.getLastRow(); 
    var data = ss.getRange(1, 1, maxRow, maxColumn).getValues(); 
    if (data.length > 1) { 
     var csv = ""; 
     for (var row = 0; row < data.length; row++) { 
      for (var col = 0; col < data[row].length; col++) { 
       if (data[row][col].toString().indexOf(",") != - 1) { 
        data[row][col] = "\"" + data[row][col] + "\""; 
       } 
      } 

      if (row < data.length - 1) { 
       csv += data[row].join(",") + "\r\n"; 
      } else { 
       csv += data[row]; 
      } 
     } 

     csvFile = csv; 
    } 

    return makeCSV(csvFile); 
} 

function makeCSV(csvString) { 
    var csvFileName = 'test.csv'; 
    var output = ContentService.createTextOutput(); 
    output.setMimeType(ContentService.MimeType.CSV); 
    output.setContent(csvString); 
    output.downloadAsFile(csvFileName); 
    return output; 
} 

Dieses Skript gibt nur das Sheet Header Details Objekt in der Konsole und es wird keine Datei heruntergeladen.

<button class="btn btn-success btn-sm" onclick="google.script.run.downloadDoubleQuateCsvFile()">Export</button> 

Nach der Rückkehr in der zweiten Funktion, bekomme ich Fehler wie folgt.

Error: The script completed but the returned value is not a supported return type. 

Hinweis: Ich habe die Excel-Datei in Laufwerk mit Daten

+0

Dies würde nur von einer doGoST() oder doPost() aus einer veröffentlichten URL zurückgegeben werden. –

+0

@SpencerEaston Von der doGet() Ich erstelle bereits und hole HtmlService zurück. Gibt es einen anderen Weg, es zu erreichen? – devo

+0

Ich sehe doGet() in Ihrem Beispiel nicht. Und in Ihrem Beispiel haben Sie makeCSV (csvFile) nicht zurückgegeben. –

Antwort

10

Um downloadAsFile() -Methode zu erhalten hat das content Objekt zu arbeiten, von einem doGet() oder eine doPost() aufgerufen zurückgegeben werden von der veröffentlichten URL.

Beispiel:

function doGet(){ 
     var output = ContentService.createTextOutput(); 
     output.setMimeType(ContentService.MimeType.CSV); 
     output.setContent(csvString); 
     output.downloadAsFile(csvFileName); 
     return output; 
} 

In Ihrem Code Sie kehren die Contentservice-Objekt auf eine Webseite über google.script.run. Es wird kein Download vom Browser angefordert. Tatsächlich führt das Zurückgeben eines Inhaltsserviceobjekts zu einem Fehler, da es kein gültiges Objekt ist, das zu einem google.script.run-Aufruf zurückkehrt. Nur native JavaScript-Objekte sind erlaubt.

Wenn Sie möchten, dass es funktioniert, müssen Sie den Benutzern einen Link zum Klicken präsentieren, der auf Ihr Skript in einem anderen Tab verweist. Oder Sie können das Attribut 'download' für ein Anchor-Tag verwenden, das auf Ihr Skript verweist.

Zum Beispiel, und dies setzt voraus, dass die Rückkehr Fix downloadDoubleQuateCsvFile halten():

function doGet(e){ 
    var serveCSV = e.parameter.servecsv; 
    if(serveCSV){return downloadDoubleQuateCsvFile()} 
    return HtmlService.createTemplateFromFile('index').evaluate() 
.setTitle('Go Smart') 
.setSandboxMode(HtmlService.SandboxMode.IFRAME); 

} 

In Ihrer Webseite:

<a href="//script.google.com/WebAppURL/exec?servecsv=true" target="_blank">Click here to download</a> 

Remeber, dass dies nicht in allen Browsern unterstützt wird. (Denken Sie nur Chrom, Opera, Firefox unterstützt Autodownload).

+0

Dead Right - großartige Erklärung! – Mogsdad

Verwandte Themen