ソフトウェア開発 プログラミング

[Django]エクセルで開くことができるcsvファイルを作成する

ソフトウェア開発
この記事は約2分で読めます。
スポンサーリンク

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-JISencodeする際に考慮しないといけない文字コードが多すぎるため、今回は「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

コメント

タイトルとURLをコピーしました