LoginSignup
0
0

More than 5 years have passed since last update.

IronRubyで起動中のExcelのシートに書き込みをする

Last updated at Posted at 2018-10-20

概要

IronRubyを使い、起動中のExcelのプロセスにアタッチする方法の紹介です。
起動中のExcelのシートに乱数を書き込むサンプルコードを掲載します。

前提

RubyとExcelのマクロについてある程度知っている方向け。
本記事のテーマはRubyやExcelマクロの文法やコーディング作法ではなく、Ruby(IronRuby)とExcelを連携させるときのテクニックです。

環境

Windows 8.1(64ビット)
IronRuby 1.1
Excel 2010

コード

コードは次の通りです。

excel_set_random.rb
# coding: utf-8

# 起動中のExcelのプロセスにアタッチする
begin
    excel = System::Runtime::InteropServices::Marshal::GetActiveObject("Excel.Application")
rescue
    abort "No Excel process."
end

# カーソルが当たっているセルに1~100の乱数を書き込む
excel.ActiveCell.Value = rand(100) + 1

実行方法

[1] Excelを起動します

[2] DOS窓を開き、excel_set_random.rbを実行します

> "C:\Program Files (x86)\IronRuby 1.1\bin\ir.exe" excel_set_random.rb

[3] 実行するとA1のセルに1~100の乱数が入力されます(カーソルがA1のセルにあるため)
exec_result_01.PNG

[4] excel_set_random.rbを何回も実行してみてください。A1のセルの値が次々と変化するはずです

解説

GetActiveObject

起動中のExcelのプロセスにアタッチするにはGetActiveObjectを使います。

excel = System::Runtime::InteropServices::Marshal::GetActiveObject("Excel.Application")

起動中のExcelのプロセスがないと例外が発生しますので、サンプルコードではrescueを併用しています。

また、このようにするとWordのプロセスにアタッチすることもできます。

word = System::Runtime::InteropServices::Marshal::GetActiveObject("Word.Application")

何が嬉しいの?

この記事の手法は手作業でファイルを編集中に、一部の作業だけをスクリプトにやらせることができます。
手作業と複数のスクリプトを組み合わせることができます。

ほかに、Excelのファイルを自動的に開いて作業を実行し、最後にファイルを保存してExcelを終了してしまう手法があります。
この場合は全自動で動いてくれる代わりに柔軟性がなく、小回りが利きません。

0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0