Tech Racho エンジニアの「?」を「!」に。
  • Ruby / Rails関連

Excel 出力が必要になったので gem: rubyXL を使ってみた

🔗 始まり

顧客に提出するExcelファイルを手作業で作成していたが
顧客が増えるので管理画面から提出するExcelを出力できるようにしたいよねっていう話から始まりました。

🔗 使用したgem

weshatheleopard/rubyXL - GitHub

rubyXLになります。
既に rubyXL が導入されていたのでこちらを流用した形になります。

Ruby Toolbox の Reports & Spreadsheets でも4番目に使用されているとなっています。

🔗 どういうことができるか

基本的な操作ができるようです。
新しいブックやシートを作ったり、既存のブック、シートを開いたり、セルに文字を入力したり等色々とできるようです。

READMEを見ると色々なことができることが分かります。

今回に関してはデータをExcelに出力してダウンロードできるようにすることなので
そのあたりの操作をしていきます。

🔗 やりたいこと

以下の4点になります。

  • テンプレートファイルを開く
  • シート名を変更する
  • セルに値を出力する
  • セルの背景色を設定する

🔗 サンプルコード

簡単なプログラムを作ってみました。

参照するテンプレートファイル

  • サンプルコードから参照しているテンプレートファイル(Excel)

サンプルコード

  • Controller等に実装するコード
require 'rubyXL'
require 'rubyXL/convenience_methods'

def create_xlsx
  # テンプレートファイルを開く
  workbook = RubyXL::Parser.parse({テンプレートのファイルパス})

  # シート選択する
  worksheet = workbook[0]

  # セルに値を出力する
  4.upto(6).each do |row|
    worksheet.add_cell(row, 1, row - 3) # No列に出力
    worksheet.add_cell(row, 2, "#{row - 3}行目 - 項目1") # 項目1に出力
    worksheet.add_cell(row, 3, "#{row - 3}行目 - 項目2") # 項目2に出力
  end

  # セルC5のフォントを変更する
  worksheet[4][2].change_font_name 'Meiryo UI'

  # セルC5の背景色を設定する
  worksheet[4][2].change_fill('0ba53d')

  # シート名を変更
  worksheet.sheet_name = "結果"

  # クライアントにxlsxを送信
  send_data workbook.stream.read, filename: "export_book.xlsx"
end

出力結果

  • 実際にコードを実行して出力したExcelファイル

🔗 使ってみて思ったこと

rubyXLをインストールすると簡単にExcelのテンプレートファイルの参照から編集の操作ができるようになって良かったです。
実際にControllerに実装してボタンをクリックしてからExcelファイルをダウンロードするところまで動作確認できました。
皆様もExcelを操作する必要が出てきたら実際に使ってみてください 🙇



CONTACT

TechRachoでは、パートナーシップをご検討いただける方からの
ご連絡をお待ちしております。ぜひお気軽にご意見・ご相談ください。