Created
January 9, 2014 11:28
-
-
Save hellwen/8332740 to your computer and use it in GitHub Desktop.
CREATE EXCEL FILE WITH XLWT AND INSERT IN FLASK RESPONSE VALID FOR JQUERY.FILEDOWNLOAD
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 xlwt | |
import StringIO | |
import mimetypes | |
from flask import Response | |
from werkzeug.datastructures import Headers | |
#... code for setting up Flask | |
@app.route('/export/') | |
def export_view(): | |
######################### | |
# Code for creating Flask | |
# response | |
######################### | |
response = Response() | |
response.status_code = 200 | |
################################## | |
# Code for creating Excel data and | |
# inserting into Flask response | |
################################## | |
workbook = xlwt.Workbook() | |
#.... code here for adding worksheets and cells | |
output = StringIO.StringIO() | |
workbook.save(output) | |
response.data = output.getvalue() | |
################################ | |
# Code for setting correct | |
# headers for jquery.fileDownload | |
################################# | |
filename = export.xls | |
mimetype_tuple = mimetypes.guess_type(filename) | |
#HTTP headers for forcing file download | |
response_headers = Headers({ | |
'Pragma': "public", # required, | |
'Expires': '0', | |
'Cache-Control': 'must-revalidate, post-check=0, pre-check=0', | |
'Cache-Control': 'private', # required for certain browsers, | |
'Content-Type': mimetype_tuple[0], | |
'Content-Disposition': 'attachment; filename=\"%s\";' % filename, | |
'Content-Transfer-Encoding': 'binary', | |
'Content-Length': len(response.data) | |
}) | |
if not mimetype_tuple[1] is None: | |
response.update({ | |
'Content-Encoding': mimetype_tuple[1] | |
}) | |
response.headers = response_headers | |
#as per jquery.fileDownload.js requirements | |
response.set_cookie('fileDownload', 'true', path='/') | |
################################ | |
# Return the response | |
################################# | |
return response |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
I have one API code that create an excel file and it downlaod. It is downloaded only in my local server(pc).. but i need to send it to the UI(browser).. please help me to send the file to the browser..
below is my code
response = Response()
response.status_code = 200
wb = Workbook()
sheet1=wb.add_sheet('sheet1',cell_overwrite_ok=True)
output = io.StringIO()
string = ',\n'.join(stoknwords)
m = output.write('string')
wb.save(m)
response.data = output.getvalue()
filename = export.xls
mimetype_tuple = mimetypes.guess_type(filename)
response_headers = Headers({
'Pragma': "public", # required,
'Expires': '0',
'Cache-Control': 'must-revalidate, post-check=0, pre-check=0',
'Cache-Control': 'private', # required for certain browsers,
'Content-Type': mimetype_tuple[0],
'Content-Disposition': 'attachment; filename="%s";' % filename,
'Content-Transfer-Encoding': 'binary',
'Content-Length': len(response.data)
})
if not mimetype_tuple[1] is None:
response.update({
'Content-Encoding': mimetype_tuple[1]
})
response.headers = response_headers
response.set_cookie('fileDownload', 'true', path='/')
return response