5

पर काम नहीं कर रहा है मेरे पास Google App Script HtmlService और HTML फॉर्म से विकसित एक वेब ऐप है, जो SpreadsheetApp का उपयोग करके Google ड्राइव में एक्सेल शीट पॉप्युलेट कर रहा है। और एक्सेल फ़ाइल के रूप में डेटा डाउनलोड करने के लिए एक और अनुभाग ContentService पर कॉल कर रहा है।Google App Script ContentService DownloadAsFile

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

यह स्क्रिप्ट सिर्फ कंसोल में शीट हेडर विवरण ऑब्जेक्ट दे रही है और यह किसी भी फ़ाइल को डाउनलोड नहीं कर रही है।

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

दूसरे फ़ंक्शन में वापसी जोड़ने के बाद, मुझे इस तरह की त्रुटि मिल रही है।

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

नोट: मैं) डेटा

साथ ड्राइव में एक्सेल फ़ाइल
+0

यह केवल प्रकाशित यूआरएल से अनुरोध किए गए डूगेट() या डूपोस्ट() से लौटने पर काम करेगा। –

+0

@SpencerEaston doGet से() मैं पहले से ही HtmlService बना रहा हूं और लौट रहा हूं। क्या इसे हासिल करने का कोई और तरीका है? – devo

+0

मुझे आपके उदाहरण में doGet() नहीं दिख रहा है। और आपके उदाहरण में btw आपने makeCSV (csvFile) 'वापस' नहीं किया था। –

उत्तर

10

downloadAsFile() विधि प्राप्त करने के लिए contentservice वस्तु काम करने के लिए एक doGet (से लौटे हो गया है या एक doPost() कहा जाता है प्रकाशित यूआरएल से।

उदाहरण:

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

अपने कोड में आप google.script.run के माध्यम से किसी वेबपृष्ठ से ContentService वस्तु लौट रहे हैं। यह ब्राउज़र से डाउनलोड का अनुरोध नहीं करेगा। वास्तव में एक Contentervice ऑब्जेक्ट को वापस करने से एक त्रुटि हो जाएगी क्योंकि यह google.script.run कॉल पर वापस जाने के लिए मान्य ऑब्जेक्ट नहीं है। केवल मूल जावास्क्रिप्ट वस्तुओं की अनुमति है।

यदि आप इसे काम करना चाहते हैं तो आपको क्लिक करने के लिए उपयोगकर्ताओं को एक लिंक के साथ पेश करने की आवश्यकता होगी जो आपकी स्क्रिप्ट को किसी अन्य टैब में इंगित करेगी। या आप अपनी स्क्रिप्ट पर इंगित एंकर टैग पर 'डाउनलोड' विशेषता का उपयोग कर सकते हैं।

उदाहरण के लिए

, और यह आप 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); 

} 

अपने वेबपेज में:

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

याद रखें कि यह सब ब्राउज़र में समर्थित नहीं है। (केवल क्रोम, ओपेरा, फ़ायरफ़ॉक्स सोचें ऑटोडाउनलोड का समर्थन करता है)।

+0

मृत अधिकार - महान स्पष्टीकरण! – Mogsdad