Perl:不能调用方法"工作表"在未定义的值上

时间:2016-02-23 01:46:36

标签: perl excel-2010

以前在WinXP& Win7但是在转移到Win10之后它显示了" Perl:不能调用方法"工作表"在一个未定义的值"错误。

my $Excel = Win32::OLE->GetActiveObject('Excel.Application') 
         || Win32::OLE->new('Excel.Application','Quit');
my $Book  = $Excel->Workbooks->Open($fileName) ;
my $Sheet = $Book->Worksheets(1);

是否需要安装任何组件?

3 个答案:

答案 0 :(得分:1)

激活ms office后问题解决了。

答案 1 :(得分:-1)

在代码的最后一行,您尝试在对象 $ book 上调用工作表。因此,错误实际上是在告诉您$ Book是 undefined - 或者更直接地说,您尝试使用的变量中没有任何内容。

要明确地找到答案,你可以;

(1)将use strict;use warnings;添加到代码的顶部,这样perl在看到常见错误时会更加详细。

(2)添加use Data::Dumper(在代码顶部),然后在第二行添加print Dumper($Excel, $fileName);

(3)通过在命令行中添加-d,然后键入 help 命令,以调试模式运行程序。您需要n移动到代码的下一个语句,并p检查变量的内容。

查看您提供的内容,错误之前的行是打开方法调用,该调用可能已失败 - 可能是因为 $ fileName 变量为空或包含名称一个不存在的文件。您可以通过替换

来检查是否是这样
my $Book  = $Excel->Workbooks->Open($fileName) ;

my $Book  = $Excel->Workbooks->Open($fileName) // die "Open returned an undefined book\n" ;

如果Open(或线路上的任何其他内容)失败,将立即退出并显示错误消息。

答案 2 :(得分:-1)

“Perl:无法调用方法”错误“未定义值上的工作表”

是因为您的电子表格是在.xlsx中创建的,您需要将工作表保存在.xls中并再次运行才能生效!

源:

Can't call method "worksheet" on an undefined value