Google App Engine用フレームワークKayでExcelファイルをダウンロードさせる方法。
今回は、Excelファイルの作成にxlwtを使用しました。
xlwtはpure pythonなので、コピーするだけで使用できます。
Kayでプロジェクトのルートフォルダーに、xlwtのxlwtフォルダーをコピーします。
xlwtフォルダー中のdocフォルダーやexamplesフォルダーは不要です。
myproject/
├ kay/
├ myapp/
└ xlwt/
xlwtでExcelデータを作成します。
wb = xlwt.Workbook()
ws1 = wb.add_sheet('Sheet1')
ws1.write(0, 0, u'セル:A1')
ws1.write(1, 0, u'セル:A2')
ws1.write(0, 1, u'セル:B1')
ws1.write(1, 1, u'セル:B2')
xlwt.save()は引数にファイルライクなオブジェクトをとります。
今回はStringIOを使用しました。
data = StringIO.StringIO()
wb.save(data)
レスポンスのヘッダーにContent-TypeとContent-Dispositionを設定します。
header = Headers()
header.add('Content-Type', 'application/octet-stream');
header.add('Content-Disposition', 'attachment', filename='foo.xls')
Excelデータとヘッダーを指定した、レスポンスを返します。
return Response(data.getvalue(), headers=header)
全体のソースコードは次のようになります。
myapp/views.py
def index(request):
import xlwt
import StringIO
from werkzeug.datastructures import Headers
from werkzeug import Response
wb = xlwt.Workbook()
ws1 = wb.add_sheet('Sheet1')
ws1.write(0, 0, u'セル:A1')
ws1.write(1, 0, u'セル:A2')
ws1.write(0, 1, u'セル:B1')
ws1.write(1, 1, u'セル:B2')
data = StringIO.StringIO()
wb.save(data)
header = Headers()
header.add('Content-Type', 'application/octet-stream');
header.add('Content-Disposition', 'attachment', filename='foo.xls')
return Response(data.getvalue(), headers=header)