summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2016-05-22 20:44:42 -0400
committerJesse Luehrs <doy@tozt.net>2016-05-22 20:45:26 -0400
commitc7c05c53a31b100a065502a9dbb65a1502a14bf9 (patch)
tree9b36074c4c7404b501ff178f979ec040d9d40593
parent6d49e45380bbcd75f7621ab1690bd9652e3d414d (diff)
downloadspreadsheet-parsexlsx-c7c05c53a31b100a065502a9dbb65a1502a14bf9.tar.gz
spreadsheet-parsexlsx-c7c05c53a31b100a065502a9dbb65a1502a14bf9.zip
allow for non-case-sensitive zip file entries (???) (Tux, #57)
-rw-r--r--lib/Spreadsheet/ParseXLSX.pm21
-rw-r--r--t/bug-57.t11
-rw-r--r--t/data/bug-57.xlsxbin0 -> 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
new file mode 100644
index 0000000..11bcb76
--- /dev/null
+++ b/t/data/bug-57.xlsx
Binary files differ