Как сделать Win32:: OLE работать на 64bit MS OFFICE установки

у меня есть два ПК, у одного установлен MS Office 2013 32bit и установлен другой MS Office 64bit. У меня есть код Perl, который использует Win32::OLE модуль Perl для управления таблицами XLS. Код отлично работает на 32-битном ПК,но имеет проблему на 64-битном.

после проведения некоторых исследований вот что я узнал. Проблема в следующей строке кода:

use Win32::OLE::Const 'Microsoft Excel .* Object Library';

Я заглянул внутрь Win32::OLE::Const модуль и кажется, что модуль ищет эту библиотеку в реестре. Когда я распечатал все записи из реестра с 32 и 64 бит, я обнаружил, что эта библиотека доступна на 32bit и недоступна на 64bit.

есть ли способ установить эту библиотеку на 64 бит? Если нет, есть ли другие модули, которые позволили бы Ole-автоматизации Excel?

все, что нужно сделать моему скрипту Perl, это открыть файл XLS и сохранить его как CSV. Я делаю это с Spreadsheet::ParseExcel и Spreadsheet::XLSX во всех остальных скриптов. Проблема с этим конкретным файлом XLS заключается в том, что он защищен паролем и использует нестандартное шифрование пароля. Так что Spreadsheet::ParseExcel не может открыть его. Win32::OLE не имеет проблем с открытием файла на 32бит.

код можно обеспечить если нужно.

посоветуйте, пожалуйста.

спасибо, - Андрей!--10-->

4 ответов


я использую свой Win32::OLE::Const модуль, чтобы иметь константы Excel, доступные в Perl.

недавно у меня была чистая установка Win7 x64 с Office 2016, и скрипт больше не работал (используя последнюю версию Win32::OLE::Const модуль, который установлен с текущей (на 06/04/2016) установкой ActiverPerl 64 бит).

после некоторого расследования я узнал, что Win32::OLE::Const не видел объект автоматизации Excel, хотя он был хорошо зарегистрирован и доступен в регистрационная база.

в базе данных регистрации следующий ключ содержит путь к исполняемому файлу Excel:

HKEY_LOCAL_MACHINE\SOFTWARE\Classes\TypeLib\{00020813-0000-0000-C000-000000000046}.9\Win64

если я добавлю вручную новый ключ

HKEY_LOCAL_MACHINE\SOFTWARE\Classes\TypeLib\{00020813-0000-0000-C000-000000000046}.9\Win32 

С тем же путем, что и для ключа Win64, тогда скрипт Perl нашел тип Excel и снова работал.

надеюсь, что это помогает.


раздел реестра также помогает с Outlook 2013.

/HKEY_LOCAL_MACHINE\SOFTWARE\Classes\TypeLib\{00062FFF-0000-0000-C000-000000000046}.5\win32

Не могу комментировать пока. Итак, публикация как ответ! :

  1. вы можете использовать активную 64-разрядную версию perl. link1 и Реф

  2. Ref link2 также может помочь вам, хотя это о ruby.


Я не знаю, поддерживается ли этот модуль Perl драйвером Jet Oledb, если это так, то, возможно, эта загрузка может помочь:

http://www.microsoft.com/en-us/download/details.aspx?id=13255