【问题标题】:Perl: Can't call method "Worksheets" on an undefined valuePerl:无法在未定义的值上调用方法“工作表”
【发布时间】:2017-02-25 04:26:23
【问题描述】:

以前在 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);

需要安装什么组件吗?

【问题讨论】:

  • 你不是问stackoverflow.com/q/35501825/100754吗?如果是这样,您至少应该阅读我的答案。看起来您尝试复制初始化代码,但没有使用复制和粘贴,而是尝试在不理解的情况下重新键入它。

标签: perl excel-2010


【解决方案1】:

激活ms office后问题解决。

【讨论】:

    【解决方案2】:

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

    要明确地找出答案,您可以;

    (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 book\n" ;
    

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

    【讨论】:

    • 我认为您不了解 Win32::OLE 的工作原理以及需要在 Excel 实例上调用哪些方法,因此您只是提供一般调试建议,但与 OP 的原始问题无关。
    • 如果你这么说,Sinan - 请记住,OP 的代码(如给定)中没有任何地方是 $fileName 初始化
    • 当然。但是如果Open失败了,原因就不会在$!中了。
    • 但是,当然,有一种方法可以得到错误信息。
    • 但是在Win7和WinXP上运行良好,现在在Win10上显示错误。
    【解决方案3】:

    “Perl: Can't call method “Worksheets” on an undefined value”的错误

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

    来源:

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

    【讨论】:

    • 这是一种不同的方法(worksheet,不是Worksheets),使用不同的模块(Spreadsheet::ParseExcel::SaveParser,不是Win32::OLE)。
    猜你喜欢
    • 2017-05-18
    • 1970-01-01
    • 2016-12-22
    • 1970-01-01
    • 2012-11-07
    • 2019-03-27
    • 1970-01-01
    • 1970-01-01
    • 2016-12-10
    相关资源
    最近更新 更多