3

我已经为此奋斗了两天,我找不到解决方案,我感到很沮丧。在 Cygwin 下使用下面的代码时,我收到此错误

“Microsoft Office Excel”中的 OLE 异常:Excel 无法访问“Empty.xls”。
该文档可以是只读的或加密的。Win32::OLE(0.1703) 错误 0x800a03ec 在 m:/In/make_excel.pl 第 24 行的 METHOD/PROPERTYGET“打开”

问题是在 DOS 提示下它运行良好。该文件当然不是只读的。我猜文件格式解释存在一些问题。有什么提示吗?将不胜感激。

#!/usr/bin/perl
use Win32::OLE;
use Win32::OLE::Variant;
use Win32::OLE::Const 'Microsoft Excel';
$Excel = Win32::OLE->GetActiveObject('Excel.Application') ||
   Win32::OLE->new('Excel.Application');
$Excel->{'Visible'} = 0;        #0 is hidden, 1 is visible
$Excel->{DisplayAlerts}=0;  #0 is hide alerts
# Open File and Worksheet
my $Book = $Excel->Workbooks->Open('C:\Empty.xls'); 
...
4

2 回答 2

3

MS Excel 需要 MS Windows 路径。

问题出在

my $seedProject = "$ENV{'HOME'}/Empty.xls";

使用 '\\' 而不是 '/' :Excel 仅适用于 Windows 路径。还要检查 $ENV{HOME} 中的路径分隔符。

于 2012-10-04T20:05:48.080 回答
1

在 Cygwin 中工作时,保持常规 Windows 世界和它的 Cygwin 角落的绝缘非常重要。完全有可能您实际上没有Win32::OLE安装 Cygwin,并且以某种方式将 ActiveState 的 lib 目录添加到@INCCygwin 的目录中perl(通过环境设置或其他方式)。这主要适用于纯 Perl 模块,但任何使用 XS 的东西都会搞砸。

通过Win32::OLE在 Cygwin 中安装,您可能将它放在@INCActiveState 的 lib 目录之前,因此允许 Cygwinperl找到正确的模块。但是,您应该运行类似:

$ perl -e '打印“@INC\n”'

在 Cygwin 提示符下确保其中仅出现 Cygwin 路径。

此外,您可能希望通过 安装 Cygwin 的perl-libwin32setup.exe,而不是手动构建模块。

于 2012-07-10T14:39:39.553 回答