以前在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);
需要安装任何组件吗?
激活 ms office 后问题已解决。
在代码的最后一行中,您尝试在对象$book上调用工作表。因此,该错误有效地告诉您$Book是未定义的 - 或者更直白地说,您尝试使用的变量中没有任何内容。
要明确找出答案,您可以;
(1)在代码顶部添加use strict;
和use warnings;
,这样perl在看到常见错误时会更加冗长。
(2) 添加use Data::Dumper
(在代码顶部),然后在倒数第二行添加print Dumper($Excel, $fileName);
(3) 通过在命令行中添加-d
在调试模式下运行程序,然后键入 help 命令。 您需要n
移动到代码的下一条语句,p
检查变量的内容。
查看您提供的内容,错误前面的行是可能失败的 Open 方法调用 - 可能是因为 $fileName 变量为空或包含不存在的文件的名称。 您可以通过替换来简单地检查是否是这样
my $Book = $Excel->Workbooks->Open($fileName) ;
跟
my $Book = $Excel->Workbooks->Open($fileName) // die "Open returned an undefined bookn" ;
如果打开(或行上的任何其他内容)失败,它将立即退出并显示错误消息。
Perl:无法在未定义的值上调用方法"工作表"
是因为您的电子表格是在.xlsx中创建的,您需要将工作表保存在.xls中并再次运行它会起作用!
源:
无法对未定义的值调用方法"工作表"