Я знаю, что этот вопрос задавался при непосредственном использовании VB, но у меня возникли проблемы с завершением процесса. Я использую jruby-версию win32ole и ruby 1.9. Мой текущий код выглядит примерно так:
begin
excel = WIN32OLE::connect('excel.Application')
rescue
excel = WIN32OLE::new('excel.Application')
end
excel.Visible = 1
workbook = excel.Workbooks.Open("path to some doc")
ws = workbook.Worksheets(1)
ws.Select
cell_content = ws.Cells(4,4).Value
puts("#{cell_content}")
workbook.Close
cell_content = nil
ws = nil
workbook = nil
excel.ole_free
excel = nil
GC.start
Я пытаюсь просто открыть Excel, получить значение и завершить работу. Но когда я смотрю диспетчер задач, я все еще вижу, что EXCEL.exe работает. Из-за начала спасения он также должен открывать существующий исполняемый файл, но каждый раз, когда я его запускаю, он запускает новый процесс. Как только скрипт останавливается, я вручную закрываю excel, но я также пытался использовать excel.Close. Нужно ли вызывать рубиновый эквивалент Marshal.releaseComObject? У меня нет большого опыта работы с VB, и я новичок в рубине, поэтому извините, если это глупый вопрос, но заранее спасибо!
Изменить: я также пытался использовать excel.quit и excel.Quit, извините, я забыл упомянуть об этом. Ни один из них не работает.
Редактировать 2: я работаю на rubymine и использую Windows XP, используя gem: jruby-win32ole
Редактировать 3: Код правильно завершает процесс на другом компьютере, так что, возможно, проблема с версиями? На jruby 1.5.6 работало, на 1.6.5.1 процесс зависает