首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Spreadsheet::Read在perl中迭代Excel文件

使用Spreadsheet::Read在perl中迭代Excel文件
EN

Stack Overflow用户
提问于 2013-05-16 21:51:10
回答 2查看 2.6K关注 0票数 1

我正在尝试解析excel文件中的数据(可以是xlsx或xls)。

我已经知道我想要获取哪些工作表,所以我想遍历它们并从中提取数据。

我的代码:

代码语言:javascript
运行
复制
#!/usr/bin/perl -w

use strict;
use warnings;
use Spreadsheet::Read;
use Getopt::Long;

my $inputfile;

GetOptions (
  'i=s' => \$inputfile,
);

die 'missing input file' unless $inputfile;

my $workbook  = ReadData ($inputfile, debug => 9);
my @worksheets = (1);
foreach (@worksheets) {
  my $sheet = $workbook->[$_-1];

  next unless $sheet;

  my ( $row_min, $row_max ) = $sheet->row_range();
  my ( $col_min, $col_max ) = $sheet->col_range();
  for my $row ($row_min .. $row_max) {

  }
}

然而,我得到了以下信息:

代码语言:javascript
运行
复制
Can't call method "row_range" on unblessed reference at perl/parse_test.pl line 22.

我是perl的新手,还不了解哈希、数组和引用的错综复杂。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-05-16 22:32:19

首先,如果您不需要数组,请不要使用它,

my @sheet = $workbook->[$_-1]; => my $sheet = $workbook->[$_-1];

如果仍然发生错误,则打印检查$sheet实例的$sheet引用。

代码语言:javascript
运行
复制
next unless $sheet;
print ref($sheet), "\n";

看起来您数据应该以另一种方式访问,这是从http://metacpan.org/pod/Spreadsheet::Read#Data-structure

代码语言:javascript
运行
复制
$book = [
  # Entry 0 is the overall control hash
  { sheets  => 2,
    sheet   => {
      "Sheet 1"  => 1,
      "Sheet 2"  => 2,
      },
    type    => "xls",
    parser  => "Spreadsheet::ParseExcel",
    version => 0.59,
    },
  # Entry 1 is the first sheet
  { label   => "Sheet 1",
    maxrow  => 2,
    maxcol  => 4,
    cell    => [ undef,
      [ undef, 1 ],
      [ undef, undef, undef, undef, undef, "Nugget" ],
      ],
    A1      => 1,
    B5      => "Nugget",
    },
  # Entry 2 is the second sheet
  { label   => "Sheet 2",
    :
    :
]

所以如果你想从$sheet中读取标签,它应该是$sheet->{label},依此类推。

票数 3
EN

Stack Overflow用户

发布于 2013-05-16 22:31:43

问题如下:

代码语言:javascript
运行
复制
@sheet->row_range

不能在非对象上使用方法。对象必须是引用,即标量。它应该以$开头,而不是@

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

https://stackoverflow.com/questions/16589295

复制
相关文章

相似问题

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