在Cygwin下使用Perl Win32 :: OLE读取.xls文件时出现问题

时间:2012-07-10 05:40:50

标签: perl excel cygwin win32ole

我一直在和这个人打架两天,我找不到解决方案而且我感到很沮丧。使用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'); 
...

2 个答案:

答案 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包,而不是手动构建模块。