在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的perl
find正确的模块。 不过,你应该运行如下的东西:
$ perl -e'print“@INC \ n”'
在Cygwin提示符上确保只有Cygwinpath出现在它中。
另外,你可能想通过setup.exe
来安装Cygwin的perl-libwin32
包,而不是手动构build模块。