Skip to content

Instantly share code, notes, and snippets.

@marceloleiva
Forked from MrYoda/views.py
Created April 27, 2017 21:59
Show Gist options
  • Save marceloleiva/839a73db81e83069694cf53399cded33 to your computer and use it in GitHub Desktop.
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
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