我有两台电脑,一台安装了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::ParseExcel
和Spreadsheet::XLSX
进行此操作。此特定XLS文件的问题在于它受密码保护并使用非标准密码加密。所以Spreadsheet::ParseExcel
无法打开它。 Win32::OLE
在32位上打开文件没有问题。
如果需要,可以提供代码。
请告知。
谢谢你, -Andrey
答案 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