如何使Win32 :: OLE在64位MS OFFICE安装上工作

时间:2014-08-26 15:45:03

标签: excel perl win32ole

我有两台电脑,一台安装了MS Office 2013 32位,另一台安装了MS Office 64bit。 我有Perl代码使用Win32::OLE Perl模块来操作XLS电子表格。 该代码在32位PC上运行良好,但在64位PC上有问题。

在做了一些研究后,我发现了。 问题是以下代码行:

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

我查看了Win32::OLE::Const模块内部,似乎该模块正在注册表中查找该库。当我从32位和64位打印出注册表中的所有条目时,我发现该库在32位上可用,而在64位上不可用。

有没有办法在64位上安装该库?如果没有,是否有任何其他模块可以允许Excel的OLE自动化?

我的所有Perl脚本需要做的是打开XLS文件并将其另存为CSV。我在所有其他脚本中使用Spreadsheet::ParseExcelSpreadsheet::XLSX进行此操作。此特定XLS文件的问题在于它受密码保护并使用非标准密码加密。所以Spreadsheet::ParseExcel无法打开它。 Win32::OLE在32位上打开文件没有问题。

如果需要,可以提供代码。

请告知。

谢谢你, -Andrey

2 个答案:

答案 0 :(得分:7)

我使用您的Win32::OLE::Const模块在​​Perl中提供Excel常量。

最近,我使用Office 2016进行了干净的Win7 x64安装,并且该脚本不再工作(使用最新版本Win32::OLE::Const模块,该模块随当前安装(2016年6月6日)ActiverPerl 64位安装)。

经过一些调查后,我发现Win32::OLE::Const没有看到Excel自动化对象,尽管它已经注册并在注册数据库中可用。

在注册数据库中,以下项包含Excel可执行文件的路径:

HKEY_LOCAL_MACHINE\SOFTWARE\Classes\TypeLib\{00020813-0000-0000-C000-000000000046}\1.9\0\Win64

如果我手动添加新密钥

HKEY_LOCAL_MACHINE\SOFTWARE\Classes\TypeLib\{00020813-0000-0000-C000-000000000046}\1.9\0\Win32 

使用与Win64密钥相同的路径,然后Perl脚本找到Excel类型库并再次工作。

希望这有帮助。

答案 1 :(得分:2)

注册表项也有助于Outlook 2013.

/HKEY_LOCAL_MACHINE\SOFTWARE\Classes\TypeLib\{00062FFF-0000-0000-C000-000000000046}\9.5\0\win32