Skip to content

Instantly share code, notes, and snippets.

@MrYoda
Last active June 16, 2023 05:03
Show Gist options
  • Save MrYoda/d3b39f565de9c107608d7ec53aa82835 to your computer and use it in GitHub Desktop.
Save MrYoda/d3b39f565de9c107608d7ec53aa82835 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
@sagarguptay2j
Copy link

Can we stream the file while writing into the workbook(can have multiple sheets)?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment