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