У меня есть старая программа ruby, которая извлекает значения из файла Excel и сохраняет сводку в другом файле Excel.Для этого в программе используется библиотека win32ole от Ruby.После переключения на новый компьютер с 64-битной Windows 7 (вместо 32-битной Windows XP), Office 2007 вместо Office 2003, программа теперь выдает ошибку при сохранении полученного файла Excel:
ana.rb:120:in `method_missing': SaveAs (WIN32OLERuntimeError)
OLE error code:800A03EC in Microsoft Office Excel
'c:/my/dir' could not be accessed. The file could be corrupt, is on a server that does not react, or the file is write protected.
(German: Auf 'c:/my/dir' konnte nicht zugegriffen werden. Unter Umstaenden ist die Datei beschaedigt, befindet sich auf einem Server, der nicht mehr reagiert, oder die Datei ist schreibgeschuzetzt.)
HRESULT error code:0x80020009
Ausnahmefehler aufgetreten.
from ana.rb:120:in `save'
from ana.rb:54:in `generateReport'
from ana.rb:13:in `ana'
from ana.rb:191
Соответствующие частипрограммы:
def generateReport
...
report.save(basicdir + reportfile)
...
end
с отчетом:
class EasyExcel
def initialize(path)
@path = path
@excel = excel = WIN32OLE.new("excel.application")
@workbook = @excel.Application.Workbooks.Open(@path)
@cache = Array.new
end
def save(filename)
saveCache
@workbook.SaveAs(filename)
end
Строка 120 - это @workbook.SaveAs(filename)
.Значение filename
на данный момент равно c:/projekte/itcampus/feedback-analyse/feedback_report.xls
.После некоторой отладки я заметил, что из-за моей плохой обработки исключений ruby после остановки интерпретатора ruby есть 2 случая зависания excel.Таким образом, кажется, что проблема действительно связана с изменениями в путях обработки в Excel в Windows 7.
Кто-нибудь знает ответы на следующие вопросы:
- Что может бытьпричина сбоя: 64-разрядная вместо 32-разрядной, использование Office 2007 вместо 2003 или обоих?
- Существует ли обходной путь или исправление для использования моста к 64-разрядной версии Windows 7 и приложений, таких как Word или Excel, из Ruby?
- Как узнать, какой API доступен из приложения Windows от Ruby?
Я использовал следующие интерпретаторы Ruby:
- ruby 1.8.7(2011-02-18 уровень исправления 334) [i386-mingw32]
- ruby 1.9.2p180 (2011-02-18) [i386-mingw32]