还在Perl学习走路(爬行?)。
我有Perl代码,我基本上试图遍历数组字符串并在我的工作簿中找到这些工作表(现在,我100%肯定会有一张工作簿中提供了名称的工作表)。 $ workheet变量似乎根据
分配给工作表print $worksheet->(Name);
测试线。但是,下一行
my $cell = $worksheet->get_cell(1,1);
似乎没有设置单元格,因为以下行不打印单元格值(我知道这是为这种情况设置的)。我知道这个,因为如果我在
中注释掉“if($ cell)”my $value = $cell->value() if ($cell);
我收到错误:
Can't call method "value" on an undefined value at script.pl line 14
完整代码在这里:
use strict;
use warnings;
use Spreadsheet::XLSX;
my $excel = Spreadsheet::XLSX -> new ('C:\Scott.xlsm',);
my @sheets = qw(Fund_Data GL_Data);
foreach my $sheet (@sheets) {
my $worksheet = $excel->Worksheet($sheet);
print $worksheet->{Name}, "\n"; #just a test to make it is being set to worksheet
my $cell = $worksheet->get_cell(1,1);
my $value = $cell->value() if ($cell);
print $value, "\n" if ($value);
}
我的结果很简单:
Fund_Data
GL_Data
什么时候应该
Fund_Data
you '--> (Range("A1").Value in Sheet("Fund_Data"))
GL_Data
me '--> (Range("A1").Value in Sheet("GL_Data"))
另外,我构建上面代码的基础是下面的代码,经过了尝试和测试。上面代码的主要区别在于,我试图根据数组值分配我想要的工作表,而不是遍历每个工作表。
use strict;
use warnings;
use Spreadsheet::XLSX;
my $excel = Spreadsheet::XLSX -> new ('P:\VBA\Help\Book3.xlsx',);
foreach my $sheet (@{$excel -> {Worksheet}}) {
printf("Sheet: %s\n", $sheet->{Name});
my $cell = $sheet->get_cell(2,1);
my $value = $cell->value();
printf("Cell value is: $value");
}
答案 0 :(得分:3)
根据@JackManey上面的评论,我在$ Worksheet上使用了Data :: Dumper,得到了以下结果(部分结果):
$VAR1 = bless( {
'DefColWidth' => '8.43
'MinCol' => 0,
'MaxRow' => 25,
'MinRow' => 0,
'path' => 'worksheets/
'MaxCol' => 0,
'Name' => 'Fund_Data',
'MinCol'=> 0,'MinRow'=> 0,让我知道我的单元格引用是零基础的事实。当我改变了
my $cell = $worksheet->get_cell(1,1);
到
my $cell = $worksheet->get_cell(0,0);
我得到了我想要的结果!
我不仅得到了我的Q回答,还学到了很棒的内置PERL功能!