Да, $worksheet
, вероятно, 0. Поскольку язык интерфейса приложений Microsoft - VB, первый индекс для Worksheets
- как во многих коллекциях MS - равен 1.
Так что вы можете проверить свой диапазон на здравомыслие.
if ( $worksheet > 0 and $worksheet <= $xl->Worksheets->{Count} ) {
...
}
Идея Jmz, вероятно, не плохой способ преодолеть проблему.
use Win32::OLE qw<in>;
my @sheets = in $book->worksheets;
my $first_sheet = $sheets[0]; # or shift @sheets.
Таким образом, уменьшая когнитивный диссонанс с VB-иша до Perl.