summaryrefslogtreecommitdiffstats
path: root/lib/Spreadsheet/ParseXLSX.pm
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2013-05-10 11:23:01 -0500
committerJesse Luehrs <doy@tozt.net>2013-05-10 11:23:01 -0500
commitb05da042b20e76108a86ee91d2cb9619c4463824 (patch)
tree1a12e5c55d6b168fde62799908d30590e636dd46 /lib/Spreadsheet/ParseXLSX.pm
parent4e4d2ae08c38dd425145b2401509b9232837185e (diff)
downloadspreadsheet-parsexlsx-b05da042b20e76108a86ee91d2cb9619c4463824.tar.gz
spreadsheet-parsexlsx-b05da042b20e76108a86ee91d2cb9619c4463824.zip
support opening filehandles too
Diffstat (limited to 'lib/Spreadsheet/ParseXLSX.pm')
-rw-r--r--lib/Spreadsheet/ParseXLSX.pm16
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);
}