Google App Engine用フレームワークKayでExcelファイルをダウンロードさせる

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)

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください