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

我一直在和这个打架了两天,找不到解决办法,我感到沮丧。 在Cygwin下使用下面的代码时,我得到这个错误

“Microsoft Office Excel”中的OLEexception:Excel无法访问“Empty.xls”。
该文件可能是只读的或encryption的。 Win32 :: OLE(0.1703)错误0x800a03ec在方法/ 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'); ... 

MS Excel需要MS Windowspath。

问题在于

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

使用'\\'而不是'/':Excel只适用于Windowspath。 检查$ ENV {HOME}中的path定界符。

在Cygwin中工作时,保持常规Windows Universe和Cygwinangular落非常重要。 这是完全可能的,你实际上没有一个Cygwin的Win32::OLE安装开始,并以某种方式添加到Cygwin的perl @INC (通过环境设置或其他)的ActiveState的lib目录。 这将主要用于纯Perl模块,但使用XS的任何东西都将被搞乱。

通过在Cygwin中安装Win32::OLE ,你可能已经把它放在@INC Directory的lib目录之前的@INC中,因此允许Cygwin的perlfind正确的模块。 不过,你应该运行如下的东西:

  $ perl -e'print“@INC \ n”' 

在Cygwin提示符上确保只有Cygwinpath出现在它中。

另外,你可能想通过setup.exe来安装Cygwin的perl-libwin32包,而不是手动构build模块。