On a django site, I want to generate an excel file based on some data in the database.
I'm thinking of using xlwt, but it only has a method to save the data to a file. How can get the file to the HttpResponse object? Or maybe do you know a better library?
I've also found this snippet but it doesn't do what I need. All I want is a way to get the stream from the xlwt object to the response object (without writing to a temporary file)
neat package! i didn't know about this
According to the doc, the save(filename_or_stream)
method takes either a filename to save on, or a file-like stream to write on.
And a Django response object happens to be a file-like stream! so just do xls.save(response)
. Look the Django docs about generating PDFs with ReportLab to see a similar situation.
edit: (adapted from ShawnMilo's comment):
def xls_to_response(xls, fname):
response = HttpResponse(mimetype="application/ms-excel")
response['Content-Disposition'] = 'attachment; filename=%s' % fname
xls.save(response)
return response
then, from your view function, just create the xls
object and finish with
return xls_to_response(xls,'foo.xls')