Ruby-программа с win32ole больше не работает под Windows7 64bit - PullRequest
2 голосов
/ 19 сентября 2011

У меня есть старая программа 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]

Ответы [ 3 ]

3 голосов
/ 20 сентября 2011

Спасибо всем, кто добавил идеи и комментарии к моему вопросу. Наконец я нашел обходной путь.

class EasyExcel
  ....
  def save(filename)
    saveCache
    dos_file = filename.gsub(/\//, "\\\\")
    @workbook.SaveAs(filename)
  end

В пути (ruby) каждый прямой слеш заменяется двумя обратными косыми чертами, которые затем будут равны 1 обратному слешу в конце.

Итак, открытие Excel с

@workbook = @excel.Application.Workbooks.Open(@path)

@path что-то вроде

C:/projekte/itcampus/feedback-analyse/feedback/Bewertungsbogen_XX1404.xls

) работает, но

@workbook.SaveAs("c:/projekte/itcampus/feedback-analyse/feedback_report.xls")

нет. Очень странно!

1 голос
/ 19 августа 2016

У меня была похожая проблема на Windows Server 2008 (64-разрядная версия), и решение с filename.gsub(/\//, "\\\\") и expand_path не помогло.

Когда я назвал его с моим пользователем, он работал, та же самая программа в фоновом процессе с OLE-ошибкой.

Решение (не шучу, все заработало): создать папку C:\Windows\SysWOW64\config\systemprofile\Desktop.

Я нашел решение в https://blogs.msdn.microsoft.com/dataaccesstechnologies/2012/12/19/error-microsoft-office-excel-cannot-access-the-file-while-accessing-microsoft-office-11-0-object-library-from-ssis/:

Для Windows 2008 Server x64: создайте следующий каталог:

C: \ Windows \ SysWOW64 \ Config \ systemprofile \ Desktop

Для Windows 2008 Server x86: создайте следующий каталог:

C: \ Windows \ System32 \ Config \ systemprofile \ Desktop

Вот и все !! Вуаля !! Вы готовы идти… ..

Альтернативная ссылка с похожими деталями: https://social.msdn.microsoft.com/Forums/en-US/b81a3c4e-62db-488b-af06-44421818ef91/excel-2007-automation-on-top-of-a-windows-server-2008-x64?forum=innovateonoffice

0 голосов
/ 20 сентября 2011

Многие проблемы, с которыми вы можете столкнуться при использовании COM и переходе на Windows 7, связаны с правами пользователя.Вы пытались запустить программу с правами администратора?

...