Django
でエクセルで開くことができる csv
ファイルを作成する機会があったので、実装方法をメモしておきます。
前提条件
今回の開発環境は下記の通りです。
- Python : 3.6.2
- Django : 3.0.5
csv ファイルをエクセルで開くのに必要なこと
まず、 csv
ファイルをエクセルで開くには csv
ファイルの文字コードが、エクセルで開くことができる文字コードである必要があります。 Django
の 3 系ではデフォルトの文字コードが UTF-8
なので、そのまま csv
ファイルを作成してエクセルで開こうとすると日本語が文字化けしてしまします。そこで、 csv
ファイルを生成する際に文字コードを UTF-8
から日本語が文字化けしない文字コードに encode
する必要があります。「 Shift-JIS
」が日本語の文字コードとしては有名でこちらを使用してもエクセルで csv
ファイルを開くことはできるんですが、 UTF-8
から Shift-JIS
に encode
する際に考慮しないといけない文字コードが多すぎるため、今回は「 CP932
」という文字コードを利用して csv
ファイルを作成したいと思います。
実装方法
import csv
...
response = HttpResponse(content_type='text/csv; charset=CP932')
response['Content-Disposition'] = 'attachment; filename=filename.csv'
writer = csv.writer(response)
# csvファイルのヘッダ部を記述
writer.writerow(['field_a', 'field_b', ...])
# csvファイルのデータ部を記述する
writer.writerow(['data_a', 'data_b', ...])
return response
csv
ファイルのヘッダ部は出力したいヘッダの情報、データ部は queryset
などで取得したデータを for
文などでループを回してデータを設定していきます。このあたりは適宜環境に応じて書き換えてもらえればと思います。
最後に
csv
ファイルは Windows
の環境だとデフォルトでエクセルで開かれるので、その際に文字化けしてるとバグだと言われてしまうこともあると思います。テキストで開けばデータを確認することができますし、そのテキストアプリで文字コードを変換してもらえればエクセルで開いても文字化けすることもないんですが、お客さんなどにそこまで求めるのも難しいこともあるので、きちんと開発側でそういった不便さは解消しておきたいですね。
コメント
ご連絡先が掲載されていなかったため、
コメント欄よりご連絡させていただきました。
レバレジーズ株式会社の岩井と申します。
レバテックキャリアというメディアを運営しており、
そこでKoE様のブログを紹介させていただきたいと考えております。
ご検討いただけるようでしたら、コメントに併せて記入したメールアドレスまで
以下のタイトルでご連絡いただけると幸いです。
詳細はメールにてご説明させていただきます。
件名:メディア掲載について(CodeLab)
レバテックキャリア:https://career.levtech.jp/
何卒よろしくお願いいたします。