diff options
-rw-r--r-- | lib/Spreadsheet/ParseXLSX.pm | 9 | ||||
-rw-r--r-- | t/bug-13.t | 11 | ||||
-rw-r--r-- | t/data/bug-13.xlsx | bin | 0 -> 8639 bytes |
3 files changed, 16 insertions, 4 deletions
diff --git a/lib/Spreadsheet/ParseXLSX.pm b/lib/Spreadsheet/ParseXLSX.pm index da53bc3..381b16c 100644 --- a/lib/Spreadsheet/ParseXLSX.pm +++ b/lib/Spreadsheet/ParseXLSX.pm @@ -46,30 +46,31 @@ sub parse { my ($file) = @_; my $zip = Archive::Zip->new; + my $workbook = Spreadsheet::ParseExcel::Workbook->new; if (openhandle($file)) { bless $file, 'IO::File' if ref($file) eq 'GLOB'; # sigh $zip->readFromFileHandle($file) == Archive::Zip::AZ_OK or die "Can't open filehandle as a zip file"; + $workbook->{File} = undef; } elsif (!ref($file)) { $zip->read($file) == Archive::Zip::AZ_OK or die "Can't open file '$file' as a zip file"; + $workbook->{File} = $file; } else { die "Argument to 'new' must be a filename or open filehandle"; } - return $self->_parse_workbook($zip); + return $self->_parse_workbook($zip, $workbook); } sub _parse_workbook { my $self = shift; - my ($zip) = @_; + my ($zip, $workbook) = @_; my $files = $self->_extract_files($zip); - my $workbook = Spreadsheet::ParseExcel::Workbook->new; - my ($version) = $files->{workbook}->find_nodes('//fileVersion'); my ($properties) = $files->{workbook}->find_nodes('//workbookPr'); diff --git a/t/bug-13.t b/t/bug-13.t new file mode 100644 index 0000000..ded3406 --- /dev/null +++ b/t/bug-13.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-13.xlsx'); +is($wb->get_filename, 't/data/bug-13.xlsx'); + +done_testing; diff --git a/t/data/bug-13.xlsx b/t/data/bug-13.xlsx Binary files differnew file mode 100644 index 0000000..c516813 --- /dev/null +++ b/t/data/bug-13.xlsx |