5

Google App Komut Dosyası HtmlService ve html formunu kullanarak geliştirilmiş bir web uygulaması var, SpreadsheetApp kullanarak Google sürücüsünde excel sayfasını doldurarak. Ve bir başka bölüm, verileri excel dosyası olarak indirmek için ContentService'u çağırıyor.Google App Komut Dosyası İçeriğiServis downloadAsFile çalışmıyor

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; 
} 

Bu komut dosyası yalnızca konsoldaki sayfa başlık ayrıntıları nesnesini veriyor ve herhangi bir dosya indirmiyor.

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

İkinci işlevde dönüş ekledikten sonra, böyle bir hata alıyorum.

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

Not: Ben verilerle

ile sürücüsüne excel dosyası
+0

Bu, yalnızca yayınlanan bir URL'den istenen doGet() veya doPost() öğesinden dönen çalışır. –

+0

@SpencerEaston doGet'den() Çoktan HtmlService oluşturup döndürüyorum. Bunu başarmanın başka bir yolu var mı? – devo

+0

Örneğinizde doGet() öğesini göremiyorum. Ve örneğinizde btw, makeCSV (csvFile) 'i iade etmediniz. –

cevap

10

contentService nesnesini çalışmak downloadAsFile() yöntemi elde etmek için bir doGet (dönen zorundadır) ya da denilen bir doPost() var yayınlanan URL’den

Örnek: Kodunuzda

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

Eğer google.script.run üzerinden bir web sayfasına contentService nesnesi dönüyor. Tarayıcıdan indirme talep edilmeyecektir. Aslında bir contentervice nesnesinin döndürülmesi, google.script.run çağrısına dönmek için geçerli bir nesne olmadığı için bir hatayla sonuçlanacaktır. Sadece yerel javascript nesnelere izin verilir.

Eğer çalışmasını istiyorsanız, kullanıcıları bir başka sekmede betiğinize işaret edecek bir tıklama linki ile sunmanız gerekecektir. Ya da betiğinize işaret eden bir bağlantı etiketindeki 'indirme' özelliğini kullanabilirsiniz.

Örneğin

ve bu downloadDoubleQuateCsvFile() dönüş düzeltme tutmak varsayar:

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

} 

Web sayfanız olarak:

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

Anımsamak bu tüm tarayıcılarda desteklenmediğini. (Sadece krom, opera'yı düşün, firefox autodownload'u destekler).

+0

Ölü sağ - harika bir açıklama! – Mogsdad