3

Perl で歩く (這う?) ことをまだ学んでいます。

基本的に配列文字列をループしてワークブックでそれらのシートを見つけようとしている Perl コードがあります (現時点では、ワークブックに指定された名前のシートがあることは 100% 確信しています)。$worksheet 変数は、に基づいてワークシートに適切に割り当てられているようです

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");
}
4

1 に答える 1

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 関数についても学びました。

于 2012-05-23T18:32:43.760 に答える