2015-09-14 8 views
5

के साथ xlsxwriter प्रतिक्रिया लौटने पर समस्याएं डीकोडिंग हालांकि मैं this प्रश्न मेरी समस्या का समाधान करूंगा, और मैंने Simple HTTP Server उदाहरण का पालन किया लेकिन मुझे अलग-अलग मुद्दे मिल रहे हैं जिनके लिए मुझे समाधान नहीं मिल रहा है।पिरामिड

मैं अपने सर्वर में एक एक्सेल फ़ाइल जेनरेट करना चाहता हूं और इसे एचटीपी प्रतिक्रिया के साथ उपयोगकर्ता को वापस भेजना चाहता हूं। मैं अपने सर्वर में फ़ाइल और एक पिरामिड फ्रेमवर्क बनाने के लिए xlsxwriter का उपयोग कर रहा हूं। मैंने फ़ाइल बनाने और इसे वापस करने में कामयाब रहा है, लेकिन फिर पहला मुद्दा LibreCalc है (मैं उबंटू 14 पर परीक्षण कर रहा हूं) मुझसे पूछता है कि मैं फ़ाइल कैसे आयात करना चाहता हूं। इससे कोई फर्क नहीं पड़ता कि मैं क्या चुनता हूं मुझे यह त्रुटि संदेश मिलता है

सामान्य त्रुटि। सामान्य इनपुट/आउटपुट त्रुटि।

अगर मैं इसे प्रतिक्रिया के रूप में वापस लौटाए बिना फ़ाइल को बना और सहेजता हूं, तो यह ठीक खुलता है।

फ़ाइल का निर्माण करने के मेरे कोड:

output = StringIO() 
workbook = xlsxwriter.Workbook(output) 
worksheet = workbook.add_worksheet() 

# add the data 

workbook.close() 

excelcontent = output.getvalue() 
response = Response(content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 
        body=excelcontent) 
response.headers.add('Content-Disposition', 
        "attachment; filename=%s.xlsx" % nice_filename) 
response.headers.add('Access-Control-Expose-Headers','Content-Disposition') 
response.headers.add("Content-Length", str(len(excelcontent))) 
response.headers.add('Last-Modified', last_modified) 
response.headers.add("Cache-Control", "no-store") 
response.headers.add("Pragma", "no-cache") 

return response 

और मैं प्रतिक्रिया संभाल:

$http({ 
     method: 'POST', 
     url: url, 
     data: data}, 
     {responseType: 'arraybuffer'} 
    ).success(function (response, status, headers, config) { 
     var file = new Blob([response], {type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'}); 
     var fileURL = URL.createObjectURL(file); 
     var result = document.getElementsByClassName("excel_hidden_download"); 
     var anchor = angular.element(result); 
     var filename_header = headers('Content-Disposition'); 
     var filename = filename_header.split('filename=')[1]; 
     anchor.attr({ 
      href: fileURL, 
      target: '_blank', 
      download: filename 
     })[0].click(); 
    }) 

मैं सोचा पहले यह तथ्य यह है कि मैं का उपयोग के साथ कुछ हो सकता था UTF-8 पायथन फ़ाइल में एन्कोडिंग, लेकिन चूंकि मैं फ़ाइल को अन्यथा बना और खोल सकता हूं, मुझे नहीं लगता कि यह करता है।

# -*- coding: utf-8 -*-

+0

पायथन फ़ाइल में यूटीएफ -8 enconding संबंधित नहीं किया जा सकता है। –

+0

क्या आप सीधे ब्राउज़र पता बार यूआरएल से फ़ाइल डाउनलोड कर सकते हैं और देख सकते हैं कि यह कोई बेहतर काम करता है या नहीं? –

+0

यदि आपको टेक्स्ट एडिटर के साथ फ़ाइल की जांच करने की आवश्यकता नहीं है और यह देखने के लिए कि क्या अंदर है तो यह कोई संकेत देता है - यह एक्सएमएल है इसलिए इसे मानव पठनीय होना चाहिए। –

उत्तर

1

मैं this प्रश्न के उत्तर का पालन करते हुए एक समाधान के लिए प्राप्त करने में सक्षम था। मुझे यकीन है कि वास्तव में क्या चाल किया था नहीं कर रहा हूँ, लेकिन यहाँ मेरी जिसके परिणामस्वरूप कोड है:

$http({ 
    method: 'POST', 
    url: url, 
    data: data, 
    responseType: 'arraybuffer' 
}).success(function (response, status, headers, config) { 
    var blob = new Blob([response], { 
     type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' 
    }); 
    var filename = headers('Content-Disposition').split('filename=')[1]; 

    var config = { 
     data: blob, 
     filename: filename, 
    }; 

    FileSaver.saveAs(config); 
}) 

और यह पूरी तरह से काम करता है, मैं केवल http कोड बदलने की जरूरत है। जिस तरह से मैंने saveAs फ़ंक्शन के लिए angular-file-saver का उपयोग किया था।

संबंधित मुद्दे