Perl Spreadsheet :: ParseExcel无法解析并返回undef

时间:2014-09-25 06:52:17

标签: excel perl parsing spreadsheet

刚刚安装了Spreadsheet::ParseExcel模块,但遇到了问题。查看一些相关问题,但不完全相同。

#!/usr/bin/perl -w                                                                                        

use strict;
use warnings;

use Spreadsheet::ParseExcel;
use Data::Dumper;

my $bill = $ARGV[0] || die "Usage: $0 bill.xlsx\n";
my $parser = Spreadsheet::ParseExcel->new();
my $workbook = $parser->parse('Book2.xlsx');
print Dumper $workbook;

for my $worksheet ( $workbook->worksheet() ) { }

当我运行perl脚本时,出现以下错误:

Can't call method "worksheet" on an undefined value at read.bill.xlsx.pl line 15.

所以我抛弃了$workbook,得到了:

$VAR1 = undef;

和dumper解析器显示一些数据。这意味着$parser->parse失败了。谁知道为什么?感谢。

3 个答案:

答案 0 :(得分:1)

作为documentation suggest,您必须测试parse()是否返回undef并检查错误消息,

my $workbook = $parser->parse('Book2.xlsx') // die $parser->error();

答案 1 :(得分:1)

试试这个:

#!/usr/bin/perl -w

use strict;
use Spreadsheet::ParseExcel;

my $bill = $ARGV[0] || die "Usage: $0 bill.xlsx\n";
my $parser   = Spreadsheet::ParseExcel->new();
my $workbook = $parser->parse('Book2.xls');

if ( !defined $workbook ) {
    die $parser->error(), ".\n";
}

for my $worksheet ( $workbook->worksheets() ) {

} 

答案 2 :(得分:1)

在谷歌搜索后,我发现XLSX格式需要Spreadsheet :: XLSC而不是ParseExcel。解析函数也采用文件名,然后不需要$ parser->解析步骤。