Using ole_free for Excel on W2K (Ruby 1.8.0-10)


(Moran, Craig M (BAH)) #1

This is my first post. My apologies if I do something wrong. I am using
Ruby 1.8.0-10 with the Fox GUI on a Windows 2000 box to script Excel. I am
having a problem using the ole_free win32ole command. ole_free is designed
to release the resources that Excel was using when it is called. It works
fine when called from the original procedure. However, if a separate
procedure is called from the original, ole_free does not behave as intended.

I am including code for 3 separate files (TestGUI.rbw, TestGUI.rb, and
TestAPP.rb). Put these files in the same directory and run TestGUI.rbw.
Click the ‘Test’ button to execute the program. You will see that Excel is
launched twice in two different manners then closed using ole_free; once
from the original procedure and once from a nested procedure. If you check
your Task List before exiting the program, you will see that the instance of
Excel that was launched from the nested procedure still exists in the Task
List even though ole_free was called. Is there a way to make this work
properly?

Here are the files:

Save this as TestGUI.rbw:

#/usr/bin/env ruby

Title: TestGUI.rbw

require 'win32ole’
require 'TestAPP.rb’
require 'TestGUI.rb’
def run
application = FXApp.new(“Test GUI”)
application.init(ARGV)
ButtonWindow.new(application)
application.create
application.run
end
run

end TestGUI.rbw

Save this as TestGUI.rb:

#/usr/bin/env ruby

Title: TestGUI.rb

require 'fox’
include Fox
class ButtonWindow < FXMainWindow
def initialize(app)
super(app, “Test”, nil, nil, DECOR_ALL, 100, 100, 0, 0)
menubar = FXMenubar.new(self, LAYOUT_FILL_X)
filemenu = FXMenuPane.new(self)
FXMenuCommand.new(filemenu, “&Quit\tCtl-Q”, nil, getApp(),
FXApp::ID_QUIT)
FXMenuTitle.new(menubar, “&File”, nil, filemenu)
FXHorizontalSeparator.new(self,
LAYOUT_SIDE_TOP|SEPARATOR_GROOVE|LAYOUT_FILL_X)
matrix = FXMatrix.new(self, 3,
MATRIX_BY_COLUMNS|LAYOUT_SIDE_TOP|LAYOUT_FILL_X|LAYOUT_FILL_Y)
statusbar = FXStatusbar.new(self,
LAYOUT_SIDE_BOTTOM|LAYOUT_FILL_X|STATUSBAR_WITH_DRAGCORNER)
FXVerticalSeparator.new(self,
LAYOUT_SIDE_RIGHT|LAYOUT_FILL_Y|SEPARATOR_GROOVE)
group1 = FXGroupBox.new(matrix, “Test”,
GROUPBOX_TITLE_CENTER|FRAME_RIDGE|LAYOUT_FILL_COLUMN|LAYOUT_FILL_ROW|LAYOUT_
CENTER_X|LAYOUT_CENTER_Y)
testButton = FXButton.new(group1, “&Test”, nil, nil, 0,
FRAME_RAISED|FRAME_THICK|LAYOUT_FILL_X)
testButton.connect(SEL_COMMAND, method(:onCmdTest))
end
def create
super
show(PLACEMENT_SCREEN)
end
end

end TestGUI.rb

Save this as TestAPP.rb:

#/usr/bin/env ruby

Title: TestAPP.rb

require 'win32ole’
def onCmdTest(sender, sel, ptr)
excel = WIN32OLE.new(“excel.application”)
excel[‘Visible’] = TRUE
excel.Quit
excel.ole_free
TestExcel()
end
def TestExcel()
excel = WIN32OLE.new(“excel.application”)
excel[‘Visible’] = TRUE
excel.Application.Quit
excel.ole_free
end

end TestAPP.rb


(Osuka Adartse) #2

Moran, Craig M (BAH) wrote:

This is my first post. My apologies if I do something wrong. I am using
shk!!
#/usr/bin/env ruby

Title: TestAPP.rb

require 'win32ole’
def onCmdTest(sender, sel, ptr)
excel = WIN32OLE.new(“excel.application”)
excel[‘Visible’] = TRUE
excel.Quit
excel.ole_free
TestExcel()
end
def TestExcel()
excel = WIN32OLE.new(“excel.application”)
excel[‘Visible’] = TRUE
excel.Application.Quit
why the diff here? if excel.quit then it doesn’t lets excel wasting mem
’til closing the gui
excel.ole_free
end

end TestAPP.rb

I just test it, if excel.Application.quit --> excel.quit then your
problem doesn’t appear, but I don’t really know what’s the difference
between those methods