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

And*_*rey 7 excel perl win32ole

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

经过一些研究后,我发现了这一点.问题是以下代码行:

use Win32::OLE::Const 'Microsoft Excel .* Object Library';
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

请指教.

谢谢,-Andrey

小智 9

我使用您的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
Run Code Online (Sandbox Code Playgroud)

如果我手动添加新密钥

HKEY_LOCAL_MACHINE\SOFTWARE\Classes\TypeLib\{00020813-0000-0000-C000-000000000046}\1.9\0\Win32 
Run Code Online (Sandbox Code Playgroud)

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

希望这可以帮助.