python - पायथन के लिए Google App Engine में xlsxwriter का उपयोग करना



google-app-engine (1)

मैं सोच रहा हूं कि कोई भी Python के लिए Google App Engine में xlsxwriter का उपयोग कैसे कर सकता है दस्तावेज़ केवल दिखाता है कि किसी फ़ाइल को कैसे खोलें, लिखना और सहेजना है। मैंने एक्सेल पुस्तकालयों के लिए StringIO का उपयोग करने के लिए काम करनेवाले को देखा है, लेकिन वे एक्सएलएस-लेखक के लिए हस्तांतरणीय नहीं हैं। मुख्य कारण यह लगता है कि अन्य पुस्तकालयों में आप स्ट्रिंगियो बफर की आपूर्ति कर सकते हैं, जबकि एक्सएलएसईआरआई में आप केवल फ़ाइल के नाम के लिए स्ट्रिंग की आपूर्ति कर सकते हैं।

मेरे पास पायएक्ससेलरेटर का उपयोग करते हुए एक बुनियादी समाधान होता है लेकिन एक्सएलएसक्वीटर इतना अमीर होता है कि मैं इसका उपयोग करना चाहता हूं, यदि संभव हो तो


UPD: मुद्दा xlsxwriter लेखक द्वारा निर्धारित किया गया था (0.4.8 संस्करण के बाद से कार्य करता है)। उदाहरण देखें।

इस धागे में मेरे उत्तर पर भरोसा करते हुए, यहां पर GAE पर क्या काम करना चाहिए है:

from xlsxwriter.workbook import Workbook

class IndexHandler(webapp2.RequestHandler):
    def get(self):
        book = Workbook(self.response.out)
        sheet = book.add_worksheet('test')
        sheet.write(0, 0, 'Hello, world!')
        book.close()

        # construct response
        self.response.headers['Content-Type'] = 'application/ms-excel'
        self.response.headers['Content-Transfer-Encoding'] = 'Binary'
        self.response.headers['Content-disposition'] = 'attachment; filename="workbook.xls"'

लेकिन, यह एक त्रुटि फेंकता है:

NotImplementedError: केवल tempfile.TemporaryFile उपयोग के लिए उपलब्ध है

क्योंकि xlsxwriter का उपयोग कर किसी भी तरह अस्थायी निर्देशिका में लिखने की कोशिश करता है, _store_workbook विधि का स्रोत देखें और, GAE प्रोजेक्ट में tempfile मॉड्यूल का उपयोग करने की अनुमति नहीं देता: स्रोत देखें, क्योंकि, जैसा कि आप जानते हैं, वहाँ डिस्क पर कोई एक्सेस नहीं है

तो, यहां एक "दुष्चक्र" शायद आपको इसे पूरी तरह से स्मृति में कार्य करने के लिए _store_workbook विधि को संशोधित करने के बारे में सोचना चाहिए। या, हो सकता है कि आप मक्खी पर tempfile.tempdir कॉल का mock कर सकते हैं और इसे अपनी इन-मेमोरी ऑब्जेक्ट के साथ बदल सकते हैं।

एक और विकल्प xlsxwriter मुद्दा ट्रैकर पर एक मुद्दा बनाने के लिए है, मैं शर्त लगाता हूं @ jmcnamara इस विषय पर कुछ अच्छे विचार हैं।

उम्मीद है की वो मदद करदे।





xlsxwriter