2009-05-19 7 views
31

एक django साइट पर, मैं डेटाबेस में कुछ डेटा के आधार पर एक एक्सेल फ़ाइल उत्पन्न करना चाहता हूं।django एक्सेल xlwt

मैं xlwt का उपयोग करने की सोच रहा हूं, लेकिन इसमें डेटा को फ़ाइल में सहेजने का एक तरीका है। फ़ाइल को HttpResponse ऑब्जेक्ट में कैसे प्राप्त किया जा सकता है? या शायद आप एक बेहतर पुस्तकालय जानते हैं?

मुझे यह snippet भी मिला है, लेकिन यह मुझे जो चाहिए वह नहीं करता है। मैं चाहता हूं कि xlwt ऑब्जेक्ट से प्रतिक्रिया ऑब्जेक्ट (अस्थायी फ़ाइल में लिखने के बिना) स्ट्रीम प्राप्त करने का एक तरीका है

उत्तर

50

स्वच्छ पैकेज! मुझे इस

दस्तावेज़ के अनुसार, save(filename_or_stream) विधि को सहेजने के लिए फ़ाइल नाम या फ़ाइल जैसी स्ट्रीम लेने के लिए फ़ाइल नाम लेता है।

और एक Django प्रतिक्रिया ऑब्जेक्ट फ़ाइल की तरह स्ट्रीम होता है! तो बस xls.save(response) करें। एक समान स्थिति देखने के लिए ReportLab के साथ Django दस्तावेज़ों को generating PDFs के बारे में देखें।

संपादित करें: (ShawnMilo की टिप्पणी से रूपांतरित):

def xls_to_response(xls, fname): 
    response = HttpResponse(mimetype="application/ms-excel") 
    response['Content-Disposition'] = 'attachment; filename=%s' % fname 
    xls.save(response) 
    return response 

तो, अपने दृश्य समारोह से, बस xls वस्तु बना सकते हैं और

return xls_to_response(xls,'foo.xls') 
+0

धन्यवाद, मैंने सोचा था कि यह कुछ इस तरह होना चाहिए, मैं तो बस जहां देखने के लिए पता नहीं था। मैं इसे –

+5

आज़मा दूंगा यह बहुत अच्छा काम करता है, लेकिन जब तक आप वाक्यविन्यास को समझ नहीं लेते। यह चाल एक HttpResponse ऑब्जेक्ट बनाने और xlwt कार्यपुस्तिका को सहेजने के लिए है। नमूना: xls_response = HttpResponse (mimetype = "application/ms-excel") xls_response ['सामग्री-विस्थापन'] = 'लगाव; filename = foo.xls ' xls।सहेजें (xls_response) वापसी xls_response – ShawnMilo

+0

धन्यवाद आदमी, आपने वास्तव में मेरी समस्या हल की है। आपकी मदद की बहुत सराहना की! –

0

साथ खत्म अपने डेटा नहीं करता परिणाम हैं ' टी सूत्रों या सटीक प्रस्तुति शैलियों की आवश्यकता नहीं है, आप हमेशा सीएसवी का उपयोग कर सकते हैं। कोई स्प्रेडशीट प्रोग्राम सीधे इसे पढ़ेगा। मैंने कुछ वेबपैप्स भी देखे हैं जो सीएसवी उत्पन्न करते हैं लेकिन यह सुनिश्चित करने के लिए कि यह एक्सेल इसे

+0

मैंने कहीं भी पढ़ा है कि आप एक HTML फ़ाइल वापस कर सकते हैं जो एक्सेल पढ़ सकता है, लेकिन मैं सूत्रों और स्टाइल का उपयोग करना चाहता हूं, इसलिए यह अच्छा नहीं है। –

2

आप अपनी एक्सएलएस फ़ाइल को StringIO ऑब्जेक्ट में सहेज सकते हैं, जो फ़ाइल की तरह है।

आप प्रतिक्रिया में स्ट्रिंगियो ऑब्जेक्ट के getvalue() वापस कर सकते हैं। एक डाउनलोड करने योग्य स्प्रेडशीट के रूप में चिह्नित करने के लिए शीर्षलेख जोड़ना सुनिश्चित करें।

2

आप huDjango को देखना चाहते हैं जो कि serializers.queryset_to_xls() नामक फ़ंक्शन के साथ आता है, एक क्वेरीसेट को डाउनलोड करने योग्य एक्सेल शीट में परिवर्तित करें।

6

*** अद्यतन: Django-एक्सेल-टेम्पलेट्स नहीं रह गया है बनाए रखा जा रहा है, इसके बजाय Marmir http://brianray.github.com/mm/

फिर भी विकास में जैसे ही मैं लिखूं इस लेकिन http://code.google.com/p/django-excel-templates/ Django एक्सेल टेम्पलेट्स परियोजना है कि आपके पूछने करने के लिए करना है की कोशिश करो।

विशेष रूप से परीक्षणों को देखें। यहाँ एक सरल मामला है:

# 
from django_excel_templates import * 
from django_excel_templates.color_converter import * 
from models import * 
from django.http import HttpResponse 

def xls_simple(request): 

    ## Simple ## 
    testobj = Book.objects.all() 

    formatter = ExcelFormatter() 
    simpleStyle = ExcelStyle(vert=2,wrap=1) 
    formatter.addBodyStyle(simpleStyle) 
    formatter.setWidth('name,category,publish_date,bought_on',3000) 
    formatter.setWidth('price',600) 
    formatter.setWidth('ebook',1200) 
    formatter.setWidth('about',20000) 

    simple_report = ExcelReport() 
    simple_report.addSheet("TestSimple") 
    filter = ExcelFilter(order='name,category,publish_date,about,bought_on,price,ebook') 
    simple_report.addQuerySet(testobj,REPORT_HORZ,formatter, filter) 

    response = HttpResponse(simple_report.writeReport(),mimetype='application/ms-excel') 
    response['Content-Disposition'] = 'attachment; filename=simple_test.xls' 
    return response 

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

  • कोई संबंधित समस्या नहीं^_^