-
-
Save marceloleiva/839a73db81e83069694cf53399cded33 to your computer and use it in GitHub Desktop.
Python 3, Django 1.9+: Excel file creation and send on-the-fly with XlsxWriter & BytesIO
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import xlsxwriter | |
from io import BytesIO | |
from django.http import StreamingHttpResponse | |
from django.views.generic import View | |
def get_foo_table_data(): | |
""" | |
Some table data | |
""" | |
return [ | |
[1, 2, 3], | |
[4, 5, 6], | |
[7, 8, 9], | |
] | |
class MyView(View): | |
def get(self, request): | |
data = get_foo_table_data() | |
# create workbook with worksheet | |
output = BytesIO() | |
book = xlsxwriter.Workbook(output) | |
sheet = book.add_worksheet() | |
# fill worksheet with foo data | |
for row, columns in enumerate(data): | |
for column, cell_data in enumerate(columns): | |
sheet.write(row, column, cell_data) | |
book.close() # close book and save it in "output" | |
output.seek(0) # seek stream on begin to retrieve all data from it | |
# send "output" object to stream with mimetype and filename | |
response = StreamingHttpResponse( | |
output, content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' | |
) | |
response['Content-Disposition'] = 'attachment; filename=foo.xlsx' | |
return response |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment