【问题标题】:Perl Spreadsheet::ParseExcel cannot parse and return undefPerl Spreadsheet::ParseExcel 无法解析并返回 undef
【发布时间】:2014-11-19 20:39:52
【问题描述】:

刚刚安装了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;

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

【问题讨论】:

标签: excel perl parsing spreadsheet


【解决方案1】:

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

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

【讨论】:

  • 感谢您,我得到:未找到 Excel 数据。但是,它确认问题是 $parser->parse.
【解决方案2】:

试试这个:

#!/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() ) {

} 

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2015-08-17
      • 1970-01-01
      • 2011-01-12
      • 2023-03-06
      • 2011-10-25
      • 1970-01-01
      • 2016-05-10
      • 2011-10-14
      • 2011-09-22
      相关资源
      最近更新 更多