Ruby から Excel を操作する方法


COMコンポーネントを利用して、Ruby から Excel を操作する方法のまとめです。

COMコンポーネントは言語に依存せずに利用できるので、Ruby 以外の言語でもほとんど同じように Excel を操作できます。そのため、行いたい操作に対応するコードがわからない場合には、Excel の [マクロの記録] 機能によって自動生成される VBA のコードを参考にすると良いです。

改善点を見つけた場合には、コメント欄からご指摘いただけると助かります。

環境

この記事のコードは以下の環境で動作確認してあります。

OSWindows7
ExcelMicrosoft Office Professional Plus 2010
RubyVersion 2.0

多少環境が違っていても動くと思います。

Ruby から Excel を操作する方法

  1. Excel の起動と終了

    以下のコードを実行すると、Excel が非表示状態で起動します。

    require 'win32ole' excel = WIN32OLE.new('Excel.Application')

    続けて以下のコードを実行すると、Excel が表示されます。
    必要なければ表示しなくても構いませんが、開発中は表示しておくのが無難です。

    excel.visible = true

    Excel を終了するには次のようにします。

    excel.quit
  2. 既に起動している Excel への接続

    既に起動している Excel アプリケーションに接続するには WIN32OLE.new の代わりに次の様にします。

    excel = WIN32OLE.connect('Excel.Application')

    ※Excel が複数起動している場合、どれに接続するかは選べないようです。

  3. 新規 Excel ファイルの作成

    %TMP% フォルダに sample.xlsx というファイルを作成します。

    require 'win32ole' excel = WIN32OLE.new('Excel.Application') excel.visible = true # 新規ブックを作成 workbook = excel.workbooks.add # 先頭シートの左上のセルに "TEST" と書き込む workbook.sheets[1].rows[1].columns[1] = "TEST" # 保存 workbook.saveAs ENV['TMP'] + '\sample.xlsx'
  4. Excel ファイルのオープンとクローズ

    %TMP%\sample.xlsx を開き、先頭シートの左上のセルの値をコンソールに表示した後ファイルを閉じます。

    require 'win32ole' excel = WIN32OLE.new('Excel.Application') excel.visible = true # ファイルを開く workbook = excel.workbooks.open ENV['TMP'] + '\sample.xlsx' # 先頭シートの左上のセルの値を読み込む p workbook.sheets[1].rows[1].columns[1].value # ファイルを閉じる workbook.close excel.quit

サンプルコード

  • 九九の表を作成

    require 'win32ole' excel = WIN32OLE.new('Excel.Application') excel.visible = true # 定数のロード module Excel; end WIN32OLE.const_load(excel, Excel) # 新規ブックを作成 workbook = excel.workbooks.add # 先頭シートを選択 sheet = workbook.sheets[1] # 九九の表を作成 (1..9).each do |i| sheet.rows[1].columns[i + 1] = i sheet.rows[i + 1].columns[1] = i end sheet.range('B2:J10').value = '=$A2*B$1' # ボーダーライン sheet.range('A1:J10').borders.lineStyle = Excel::XlContinuous # 表のヘッダー range = sheet.range('A1:A10,B1:J1') # 背景色 range.interior.themeColor = Excel::XlThemeColorAccent1 # フォント range.font.themeColor = Excel::XlThemeColorDark1 range.font.bold = true # 列の幅 sheet.columns('A:J').columnWidth = 6
  • 上で作った表を読み込み、タブ区切りに変換して表示

    九九の表作成後、Excel を終了させずに実行してください。

    require 'win32ole' excel = WIN32OLE.connect('Excel.Application') excel.activeWorkBook.sheets[1].usedRange.rows.each do |row| puts row.columns.each.map(&:value).map(&:to_i).join("\t") end

参考サイト

[amazon asin="4839926689" /]

カテゴリー: 記事 タグ: , パーマリンク

コメントを残す