Как сделать 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
Не могу комментировать пока. Итак, публикация как ответ! :
вы можете использовать активную 64-разрядную версию perl. link1 и Реф
Ref link2 также может помочь вам, хотя это о ruby.
Я не знаю, поддерживается ли этот модуль Perl драйвером Jet Oledb, если это так, то, возможно, эта загрузка может помочь:
http://www.microsoft.com/en-us/download/details.aspx?id=13255