5

Tôi có ứng dụng web được phát triển bằng Google App Script HtmlService và từ biểu mẫu html, điền bảng excel vào ổ Google bằng cách sử dụng SpreadsheetApp. Và một phần khác đang gọi số ContentService để tải xuống dữ liệu dưới dạng tệp excel.Tải xuống Google App Script ContentServiceAsFile không hoạt động

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

Tập lệnh này chỉ cung cấp đối tượng chi tiết tiêu đề trang tính trong bảng điều khiển và không tải xuống bất kỳ tệp nào.

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

Sau khi thêm trở lại hàm thứ hai, tôi nhận được lỗi như thế này.

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

Lưu ý: Tôi có file excel trong ổ đĩa với dữ liệu

+0

Điều này sẽ chỉ hoạt động trở lại từ doGet() hoặc doPost() được yêu cầu từ url được xuất bản. –

+0

@SpencerEaston Từ doGet() Tôi đã tạo và trả lại HtmlService. Có cách nào khác để đạt được nó? – devo

+0

Tôi không thấy doGet() trong ví dụ của bạn. Và btw trong ví dụ của bạn, bạn không 'return' makeCSV (csvFile). –

Trả lời

10

Để có được phương pháp downloadAsFile() để làm việc đối tượng contentService phải được trở về từ một doGet() hoặc doPost() được gọi là từ URL được xuất bản.

Ví dụ:

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

Trong mã của bạn, bạn được trả lại đối tượng contentService đến một trang web thông qua google.script.run. Nó sẽ không yêu cầu tải xuống từ trình duyệt. Trong thực tế, trả về một đối tượng contentervice sẽ gây ra lỗi vì nó không phải là một đối tượng hợp lệ để quay lại cuộc gọi google.script.run. Chỉ cho phép các đối tượng javascript gốc.

Nếu bạn muốn nó hoạt động, bạn sẽ cần phải trình bày cho người dùng một liên kết để nhấp trỏ đến tập lệnh của bạn trong tab khác. Hoặc bạn có thể sử dụng thuộc tính 'tải xuống' trên thẻ neo trỏ đến tập lệnh của bạn.

Ví dụ, và điều này giả định bạn giữ cố định trở lại downloadDoubleQuateCsvFile():

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

} 

Trong trang web của bạn:

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

Hãy nhớ rằng đây không được hỗ trợ trong tất cả các trình duyệt. (Chỉ nghĩ chrome, opera, firefox hỗ trợ tự động tải xuống).

+0

Quyền chết - giải thích tuyệt vời! – Mogsdad

Các vấn đề liên quan