首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Perl Spreadsheet::ParseExcel无法解析并返回undef

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

Stack Overflow用户
提问于 2014-09-25 14:52:17
回答 3查看 801关注 0票数 1

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

代码语言:javascript
复制
#!/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脚本时,我得到了以下错误:

代码语言:javascript
复制
Can't call method "worksheet" on an undefined value at read.bill.xlsx.pl line 15.

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

代码语言:javascript
复制
$VAR1 = undef;

转储解析器显示一些数据。这意味着$parser->parse失败了。有人知道为什么吗?谢谢。

EN

回答 3

Stack Overflow用户

发布于 2014-09-25 14:54:42

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

代码语言:javascript
复制
my $workbook = $parser->parse('Book2.xlsx') // die $parser->error();
票数 2
EN

Stack Overflow用户

发布于 2014-09-25 15:09:48

试试这个:

代码语言:javascript
复制
#!/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
EN

Stack Overflow用户

发布于 2014-09-25 15:51:04

在搜索之后,我发现XLSX格式需要Spreadsheet::XLSC而不是ParseExcel。同样,parse函数接受文件名,然后不需要$parser->parse的步骤。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26032389

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档