diff options
-rw-r--r-- | lib/Spreadsheet/ParseXLSX.pm | 21 | ||||
-rw-r--r-- | t/bug-57.t | 11 | ||||
-rw-r--r-- | t/data/bug-57.xlsx | bin | 0 -> 248617 bytes |
3 files changed, 24 insertions, 8 deletions
diff --git a/lib/Spreadsheet/ParseXLSX.pm b/lib/Spreadsheet/ParseXLSX.pm index fda4742..c9ad9a5 100644 --- a/lib/Spreadsheet/ParseXLSX.pm +++ b/lib/Spreadsheet/ParseXLSX.pm @@ -835,7 +835,7 @@ sub _extract_files { }; my ($strings_xml) = map { - $zip->memberNamed($get_path->($_->att('Target')))->contents + $self->_zip_file_member($zip, $get_path->($_->att('Target'))) } $wb_rels->find_nodes(qq<//packagerels:Relationship[\@Type="$type_base/sharedStrings"]>); my ($styles_xml) = map { @@ -846,9 +846,7 @@ sub _extract_files { } $wb_rels->find_nodes(qq<//packagerels:Relationship[\@Type="$type_base/styles"]>); my %worksheet_xml = map { - if ( my $sheetfile = $zip->memberNamed($get_path->($_->att('Target')))->contents ) { - ( $_->att('Id') => $sheetfile ); - } + ($_->att('Id') => $self->_zip_file_member($zip, $get_path->($_->att('Target')))) } $wb_rels->find_nodes(qq<//packagerels:Relationship[\@Type="$type_base/worksheet"]>); my %themes_xml = map { @@ -872,15 +870,22 @@ sub _parse_xml { my $self = shift; my ($zip, $subfile, $map_xmlns) = @_; - my $member = $zip->memberNamed($subfile); - die "no subfile named $subfile" unless $member; - my $xml = $self->_new_twig; - $xml->parse(scalar $member->contents); + $xml->parse($self->_zip_file_member($zip, $subfile)); return $xml; } +sub _zip_file_member { + my $self = shift; + my ($zip, $name) = @_; + + my @members = $zip->membersMatching(qr/^$name$/i); + die "no subfile named $name" unless @members; + + return scalar $members[0]->contents; +} + sub _rels_for { my $self = shift; my ($file) = @_; diff --git a/t/bug-57.t b/t/bug-57.t new file mode 100644 index 0000000..0c4614b --- /dev/null +++ b/t/bug-57.t @@ -0,0 +1,11 @@ +#!/usr/bin/env perl +use strict; +use warnings; +use Test::More; + +use Spreadsheet::ParseXLSX; + +my $wb = Spreadsheet::ParseXLSX->new->parse('t/data/bug-57.xlsx'); +pass('it parses successfully'); + +done_testing; diff --git a/t/data/bug-57.xlsx b/t/data/bug-57.xlsx Binary files differnew file mode 100644 index 0000000..11bcb76 --- /dev/null +++ b/t/data/bug-57.xlsx |