Perl Spreadsheet::XLSX verweisen auf ein bestimmtes Blatt in der Arbeitsmappe
Immer noch lernen zu laufen (kriechen?) in Perl.
Habe ich den Perl-code, wo ich bin im Grunde versucht, um eine Schleife durch array-strings und finden diese Blätter in meiner Arbeitsmappe (für jetzt, ich bin 100% sicher es wird ein Blatt mit den Namen in meiner Arbeitsmappe). Die $worksheet-variable scheint zugewiesen werden, um das Arbeitsblatt nur in Ordnung, auf der Grundlage der
print $worksheet->(Name);
test. Jedoch, die nächste Zeile
my $cell = $worksheet->get_cell(1,1);
scheint nicht zu Einstellung der Zelle, für die folgenden Zeilen nicht drucken, der Wert der Zelle (die ich kenne, ist gesetzt für diesen Fall). Ich weiß das, weil wenn ich den Kommentar aus der "if ($Zelle)" in
my $value = $cell->value() if ($cell);
Bekomme ich die Fehlermeldung:
Can't call method "value" on an undefined value at script.pl line 14
Vollständige code ist hier:
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);
}
meine Ergebnisse sind einfach:
Fund_Data
GL_Data
Wenn Sie zu
Fund_Data
you '--> (Range("A1").Value in Sheet("Fund_Data"))
GL_Data
me '--> (Range("A1").Value in Sheet("GL_Data"))
Außerdem ist meine basis für den Bau der code oben wurde aus dem code unten, die ausprobiert und getestet. Der wesentliche Unterschied in der code oben ist, anstatt einer Schleife, die durch jedes Blatt, ich bin versucht, weisen die Blätter möchte ich auf der Basis der array-Werte.
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");
}
- Tun
use Data::Dumper;print Dumper($cell) . "\n";
nur nach dem initialisieren$cell
. Was wird ausgedruckt? - undef;
- so, dass offiziell erklärt mir, dass die Zelle nicht eingerichtet, aber meine Frage ist, warum nicht? und wie bekomme ich es eingestellt?
- Gut, versuchen dumping aus
$worksheet
und sehen, welche Zellen er hat. - genuis! gelöst. Ich warf die $Arbeitsblatt und fand heraus, dass die Zellbezüge sind null-basiert, so dass, bezogen auf die Zelle A1 muss die Zelle(0,0) nicht die Zelle(1,1)! Ich werde zu aktualisieren, Antwort auf meine eigene Frage unten. Ich wünschte, ich könnte Ihnen Punkte für die Lösung der Q mit Ihrem Vorschlag
Du musst angemeldet sein, um einen Kommentar abzugeben.
Pro @JackManey 's Kommentare oben, ich verwendet Data::Dumper auf $Arbeitsblatt und bekam das folgende Ergebnis (Teilergebnis):
'MinCol' => 0, 'MinRow' => 0, kippte mich aus der Tatsache, dass mein Handy Referenzen sind null-basiert. Wenn ich geändert
zu
Bekam ich die Ergebnisse, die ich wollte!!!
Nicht nur habe ich meine Q beantwortet, lernte ich eine wunderbare eingebaute PERL-Funktion!