diff options
author | Jesse Luehrs <doy@tozt.net> | 2013-05-10 11:23:01 -0500 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2013-05-10 11:23:01 -0500 |
commit | b05da042b20e76108a86ee91d2cb9619c4463824 (patch) | |
tree | 1a12e5c55d6b168fde62799908d30590e636dd46 /lib | |
parent | 4e4d2ae08c38dd425145b2401509b9232837185e (diff) | |
download | spreadsheet-parsexlsx-b05da042b20e76108a86ee91d2cb9619c4463824.tar.gz spreadsheet-parsexlsx-b05da042b20e76108a86ee91d2cb9619c4463824.zip |
support opening filehandles too
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Spreadsheet/ParseXLSX.pm | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/lib/Spreadsheet/ParseXLSX.pm b/lib/Spreadsheet/ParseXLSX.pm index 3231be8..c914276 100644 --- a/lib/Spreadsheet/ParseXLSX.pm +++ b/lib/Spreadsheet/ParseXLSX.pm @@ -3,6 +3,7 @@ use strict; use warnings; use Archive::Zip; +use Scalar::Util 'openhandle'; use Spreadsheet::ParseExcel; use XML::Twig; @@ -12,11 +13,20 @@ sub new { sub parse { my $self = shift; - my ($filename) = @_; + my ($file) = @_; my $zip = Archive::Zip->new; - die "Can't open $filename as zip file" - unless $zip->read($filename) == Archive::Zip::AZ_OK; + if (openhandle($file)) { + $zip->readFromFileHandle($file) == Archive::Zip::AZ_OK + or die "Can't open filehandle as a zip file"; + } + elsif (!ref($file)) { + $zip->read($file) == Archive::Zip::AZ_OK + or die "Can't open file '$file' as a zip file"; + } + else { + die "Argument to 'new' must be a filename or open filehandle"; + } return $self->_parse_workbook($zip); } |