#
# == win32ole-ext
# win32oleをより使いやすくするための機能を提供する。
#
# Revision:: $Id$
#
require 'win32ole'

# File
class File
  @file_system = nil

  # win32のFileSystemObjectを取得する。
  def self.file_system
    if @file_system.nil? then
      @file_system = WIN32OLE.new('Scripting.FileSystemObject')
    end
    return @file_system
  end
end #File#

class WIN32OLE
  @const_defined = Hash.new
  # win32oleの定数をロードしてあるWIN32OLEインスタンスを生成する。
  def self.new_with_const(prog_id, const_name_space)
    result = WIN32OLE.new(prog_id)
    unless @const_defined[const_name_space]
      WIN32OLE.const_load(result, const_name_space)
      @const_defined[const_name_space] = true
    end
    return result
  end
end #WIN32OLE#

module Excel

  # win32oleのExcel.Applicationインスタンスを生成する。
  # === ARGS
  # visible:: Excelを可視化させるかどうかのフラグ
  # display_alerts:: displayAlertsフラグ。falseの場合は警告メッセージを表示しない。
  def self.new(visible = true, display_alerts = false)
    excel = WIN32OLE.new_with_const('Excel.Application', Excel)
    excel.visible = visible
    excel.displayAlerts = display_alerts
    return excel
  end

  # Excelが開いている間に引数のブロックを実行する。
  # === ARGS
  # visible:: Excelを可視化させるかどうかのフラグ
  # display_alerts:: displayAlertsフラグ。falseの場合は警告メッセージを表示しない。
  # block:: 実行するブロック
  def self.run_during(visible = true, display_alerts = false, &block)
    begin
      excel = new(visible, display_alerts)
      block.call(excel)
    ensure
      excel.quit
    end
  end
end #Excel#
