Django Logo

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

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 の環境だとデフォルトでエクセルで開かれるので、その際に文字化けしてるとバグだと言われてしまうこともあると思います。テキストで開けばデータを確認することができますし、そのテキストアプリで文字コードを変換してもらえればエクセルで開いても文字化けすることもないんですが、お客さんなどにそこまで求めるのも難しいこともあるので、きちんと開発側でそういった不便さは解消しておきたいですね。

「[Django]エクセルで開くことができる csv ファイルを作成する」への1件のフィードバック

  1. ご連絡先が掲載されていなかったため、
    コメント欄よりご連絡させていただきました。
    レバレジーズ株式会社の岩井と申します。
    レバテックキャリアというメディアを運営しており、
    そこでKoE様のブログを紹介させていただきたいと考えております。
    ご検討いただけるようでしたら、コメントに併せて記入したメールアドレスまで
    以下のタイトルでご連絡いただけると幸いです。
    詳細はメールにてご説明させていただきます。
    件名:メディア掲載について(CodeLab)
    レバテックキャリア:https://career.levtech.jp/
    何卒よろしくお願いいたします。

コメントする

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