
エクセルシートにエクスポートする方法
はじめに
こんにちは!このブログへお越しいただき、ありがとうございます。
私は地方在住の駆け出しエンジニアであり、2人の娘のママです。プログラミングの学習は2022年の9月にスクールでスタートしました。初心者からスタートして、短期間でAWSの保守業務に携わり、現在はWEBエンジニアとしてのキャリアを築いています。
このブログでは、私が毎日学んでいることや、技術的な知見、子育ての中でのエンジニアとしての経験をリアルタイムにアウトプットしていこうと思います。
今回は、案件でエクセルシートへのエクスポート機能の実装について、学んだことを忘れないうちに記録します。
情報の正確性には最大限の注意を払っていますが、私も学び続けている一人です。文章の中には誤りがあるかもしれませんので、間違いを見つけた場合はぜひ優しく指摘していただけると幸いです。お読みいただきありがとうございます。
技術スタック
python 3.10.12
django
ステップ1
templatesファイルに「エクスポート」というボタンの位置を設定
ボタンを押したら、どの様な処理が行われてバックエンドに繋がるかを考えて、ボタンの配置後に同じtemplatesファイルに記入
ステップ2
urls.pyファイルにurlを設定
ステップ3
使用したライブラリ
openpyxl
pandas
フロントから届いた処理をバックエンドに書いていく
ライブラリ使用して、エクセルのファイルを作成する。
どのセルにどのデータを持っていくか考えてコーディング
response = HttpResponse(
output.getvalue(),
content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
)
response['Content-Disposition'] = f'attachment; filename=sheets.xlsx'
return response
書き終えたら、HttpResponseオブジェクトを作成。
このオブジェクトは、HTTPレスポンスデータをエンドユーザーに送信する役割を持っています。output.getvalue()は、outputIOストリームに保存されているデータをバイナリ形式で取得します。content_typeはMIMEタイプを指定しており、ここではExcelファイルのMIMEタイプを設定しています。この指定によって、クライアント側(ブラウザ等)は受け取ったデータがExcelファイルであると認識します。
HTTPヘッダーContent-Dispositionに値を設定しており、ブラウザにファイルとしてダウンロードさせるよう指示しています。attachmentはダウンロードして保存すべきことを示し、filename=sheets.xlsxはダウンロードされるファイルのデフォルトの名前を指定しています。
最後に、作成したHttpResponseオブジェクトを返して、このビューの呼び出し元に実行結果を通知しています。このコードが呼ばれた場合、サーバーはレスポンスとしてExcelファイルをクライアントに送信し、クライアント側では「sheets.xlsx」としてファイルがダウンロードされます。
実装をして学んだこと
先方から指定されたエクセルファイルをどのようにして配置し、データを書き込んでいくかが最初は理解できませんでした。しかし、Pythonでエクセルシートを作成するという方法で実装することができました。関数の呼び出し方についてや、関数の中に新たな関数を記述するのは避けるべきだということなど、基本的な部分ですが、これを実際に適用する経験をすることができて、非常に勉強になりました。