Excel
Rails5

RailsでWin/Macでも開けるExcelの吐き出し方法(絵文字・旧漢字対応)

はじめに

旧漢字・絵文字・windows/mac対応でエクセルを出力して欲しいという依頼があり、
かなりつまったので、メモ書きとして残しました。辛すぎた...

結論

以下のようにすれば、ダウンロード後、ダブルクリックで文字化けしないExcelが開けるようになる.

  1. CSV.generateでタブ区切りの文字列を生成する
  2. bomを付与
  3. encodeをUTF-16LEにする
  4. UTF-16LEのTSVファイルの拡張子がcsvになるようにする

注意点

  1. タブ区切りを '\t'にしていたのもつまずいたので注意してください。必ずダブルクォートで囲むって初めて知りましたorz
@csv = CSV.generate(col_sep: "\t") do |csv|
  csv << header
  rows.each { |row| csv << row }
end
  1. bomについて。 検索していると %w(FF FE)%(FE FF) 両パターン情報が回っています。 %(FF FE) です。本当につまりました..
respond_to do |format|
  bom = %w(FF FE).map { |e| e.hex.chr }.join.force_encoding("UTF-16LE")
  format.csv do
    send_data(
      bom + @csv.encode('UTF-16LE'),
      type: 'text/tsv',
      filename: "#{Time.zone.now.strftime('%Y-%m-%d')}.csv"
    )
  end
end

参考

とっても助かりました!
ありがとうございます!

Win/Mac どちらの Excel でも正しく開ける Unicode な csv の出力方法
RubyでMac版ExcelでインポートできるCSVデータを作成する