我一直在和这个人打架两天,我找不到解决方案而且我感到很沮丧。使用Cygwin下面的代码时出现此错误
“Microsoft Office Excel”中的OLE异常:Excel无法访问“Empty.xls” 该文档可以是只读的或加密的。 Win32 :: OLE(0.1703)错误0x800a03ec 在METHOD / PROPERTYGET“打开”m:/In/make_excel.pl第24行
问题是在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');
...
答案 0 :(得分:3)
MS Excel需要MS Windows路径。
问题在于
my $seedProject = "$ENV{'HOME'}/Empty.xls";
使用'\\'代替'/':Excel仅适用于Windows路径。 检查$ ENV {HOME}中的路径分隔符。
答案 1 :(得分:1)
在Cygwin中工作时,保持常规Windows Universe和Cygwin角落的隔离非常重要。完全有可能你实际上没有安装Cygwin Win32::OLE
安装,并且以某种方式将ActiveState的lib目录添加到Cygwin @INC
的{{1}}中(通过环境设置或其他东西)其他)。这将主要用于纯Perl模块,但任何使用XS的东西都会搞砸。
通过在Cygwin中安装perl
,您可能已将其放在ActiveState的lib目录之前的Win32::OLE
中,因此允许Cygwin的@INC
找到正确的模块。但是,你应该运行类似的东西:
$ perl -e 'print "@INC\n"'
在Cygwin提示符下,确保只显示Cygwin路径。
此外,您可能希望通过perl
安装Cygwin的perl-libwin32
包,而不是手动构建模块。