sub new { my $class = shift; my (%args) = @_; my $self = bless {}, $class; $self->{Password} = $args{Password} if defined $args{Password}; # #my new options # $self->{sheet_filter} = $args{sheet_filter} if defined $args{sheet_filter}; $self->{just_find_sheet_names} = $args{just_find_sheet_names} if defined $args{just_find_sheet_names}; return $self; } #### my @sheets = map { my $idx = $_->att('rels:id'); if ($files->{sheets}{$idx}) { my $sheet = Spreadsheet::ParseExcel::Worksheet->new( Name => $_->att('name'), _Book => $workbook, _SheetNo => $idx, ); $sheet->{SheetHidden} = 1 if defined $_->att('state') and $_->att('state') eq 'hidden'; $self->_parse_sheet($sheet, $files->{sheets}{$idx}); ($sheet) } else { () } } $files->{workbook}->find_nodes('//s:sheets/s:sheet'); #### #my hack to only process worksheets matching the sheet filter my %sheet_filter=(); if ($self->{sheet_filter}) { map {$sheet_filter{$_}} split ",", $self->{sheet_filter}; } my @sheets = map { my $idx = $_->att('rels:id'); if ($files->{sheets}{$idx}) { my $sheet = Spreadsheet::ParseExcel::Worksheet->new( Name => $_->att('name'), _Book => $workbook, _SheetNo => $idx, ); $sheet->{SheetHidden} = 1 if defined $_->att('state') and $_->att('state') eq 'hidden'; $self->_parse_sheet($sheet, $files->{sheets}{$idx}); ($sheet) } else { () } } grep {%sheet_filter ? defined $sheet_filter{$_->att('name')} : 1} $files->{workbook}->find_nodes('//s:sheets/s:sheet'); #### #my hack to only return the list of sheet names if($self->{just_find_sheet_names}) { my @sheets = map { $_->att('name'); } $files->{workbook}->find_nodes('//s:sheets/s:sheet'); $workbook->{Worksheet} = \@sheets; $workbook->{SheetCount} = scalar(@sheets); return $workbook; }