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
Schreibe einen Kommentar