cuzic と申します。

るびまで Win32OLE の記事を書いていました。
ruby-list 初投稿です。

On Mon, 28 Nov 2005 10:13:49 +0900
"Hisashi Yahata" <yahatah / agr.kyushu-u.ac.jp> wrote:

> 質問で恐縮ですが、ご教示ください。
> 
> OSはwin2Kのもとで、下記のようにwin32oleを使い、エクセルファイルを読み込むプ
> ログラムを利用しています。
> 問題は、実行するたびに、タスクマネージャーでプロセスをみると、EXCEL.exeが増
> えていきます。
(snip)
> どなたか、メソッド(コマンド)ないし対処法をご教示ください。よろしくお願いし
> ます。

WIN32OLE::connect を利用すれば、新しい Excel.exe が増えることなく
既存の Excel に接続できます。

具体的には下記のようにすれば、まだ開いていない場合にだけ開くことが
できるのではないでしょうか?

−−−

require 'win32ole'

def getAbsolutePath filename
  fso = WIN32OLE.new('Scripting.FileSystemObject')
  return fso.GetAbsolutePathName(filename)
end

def openExcel filename
  filename = getAbsolutePath(filename)
  xl = nil
  begin
    xl = WIN32OLE::connect("Excel.Application")
  rescue WIN32OLERuntimeError 
    xl = WIN32OLE.new("Excel.Application")
  end
  xl.Workbooks.each do |sheet|
    if sheet.FullName == filename
      sheet.Activate
    end
  end
  
  unless xl.ActiveWorkbook && xl.ActiveWorkbook.FullName == filename
    xl.Workbooks.Open(filename)
  end
  xl.Visible = true
  return xl
end

if $0 == __FILE__
  openExcel("sample1.xls")
end

-- 
cuzic <tomoya / cuzic.com>
プログラミングは素晴らしい http://www.cuzic.com/