summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2016-06-25 13:59:34 -0400
committerJesse Luehrs <doy@tozt.net>2016-06-25 13:59:34 -0400
commit529f114e86dfd360db60df22bbb75830b219b12a (patch)
tree6bc406d3249249d6b48a7fa68d84b1cf99975810
parent0815bd02ec1849fda6cf4666ca849bb4babdfe87 (diff)
downloadspreadsheet-parsexlsx-529f114e86dfd360db60df22bbb75830b219b12a.tar.gz
spreadsheet-parsexlsx-529f114e86dfd360db60df22bbb75830b219b12a.zip
support scalar refs as inputs too
for compatibility with Spreadsheet::ParseExcel
-rw-r--r--lib/Spreadsheet/ParseXLSX.pm12
-rw-r--r--t/basic.t8
-rw-r--r--t/encryption.t35
3 files changed, 44 insertions, 11 deletions
diff --git a/lib/Spreadsheet/ParseXLSX.pm b/lib/Spreadsheet/ParseXLSX.pm
index c38cfc2..0ffbc43 100644
--- a/lib/Spreadsheet/ParseXLSX.pm
+++ b/lib/Spreadsheet/ParseXLSX.pm
@@ -88,13 +88,20 @@ sub parse {
$workbook->{File} = undef;
$workbook->{__tempfile} = $file;
}
+ elsif (ref($file) eq 'SCALAR') {
+ open my $fh, '+<', $file
+ or die "Can't create filehandle from memory data";
+ $zip->readFromFileHandle($fh) == Archive::Zip::AZ_OK
+ or die "Can't open scalar ref 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";
+ die "Argument to 'new' must be a filename, open filehandle, or scalar ref";
}
return $self->_parse_workbook($zip, $workbook, $formatter);
@@ -110,6 +117,9 @@ sub _check_signature {
$file->read($signature, 2);
$file->seek(-2, IO::File::SEEK_CUR);
}
+ elsif (ref($file) eq 'SCALAR') {
+ $signature = substr($$file, 0, 2);
+ }
elsif (!ref($file)) {
my $fh = IO::File->new($file, 'r');
$fh->read($signature, 2);
diff --git a/t/basic.t b/t/basic.t
index dde23e6..a024619 100644
--- a/t/basic.t
+++ b/t/basic.t
@@ -7,7 +7,13 @@ use Spreadsheet::ParseXLSX;
my $filename = 't/data/Test.xlsx';
-for my $file ($filename, do { open my $fh, '<', $filename or die; $fh }) {
+my @inputs = (
+ $filename,
+ do { open my $fh, '<', $filename or die; $fh },
+ do { open my $fh, '<', $filename or die; local $/; my $d = <$fh>; \$d },
+);
+
+for my $file (@inputs) {
my $wb = Spreadsheet::ParseXLSX->new->parse($file);
isa_ok($wb, 'Spreadsheet::ParseExcel::Workbook');
diff --git a/t/encryption.t b/t/encryption.t
index 77f7c38..594701b 100644
--- a/t/encryption.t
+++ b/t/encryption.t
@@ -6,22 +6,39 @@ use Test::More;
use Spreadsheet::ParseXLSX;
{
+ my $filename = 't/data/encryption-agile-123q.xlsx';
+ my @inputs = (
+ $filename,
+ do { open my $fh, '<', $filename or die; $fh },
+ do { open my $fh, '<', $filename or die; local $/; my $d = <$fh>; \$d },
+ );
+
my $parser = Spreadsheet::ParseXLSX->new(Password => '123q');
- my $workbook = $parser->parse("t/data/encryption-agile-123q.xlsx");
+ for my $input (@inputs) {
+ my $workbook = $parser->parse($input);
- my $worksheet = $workbook->worksheet(0);
- my $cell = $worksheet->get_cell(1, 1);
- is($cell->value, 'abcdefgABCDEFG');
+ my $worksheet = $workbook->worksheet(0);
+ my $cell = $worksheet->get_cell(1, 1);
+ is($cell->value, 'abcdefgABCDEFG');
+ }
}
{
- open my $fh, "t/data/encryption-standard-default-password.xlsx" or die;
+ my $filename = 't/data/encryption-standard-default-password.xlsx';
+ my @inputs = (
+ $filename,
+ do { open my $fh, '<', $filename or die; $fh },
+ do { open my $fh, '<', $filename or die; local $/; my $d = <$fh>; \$d },
+ );
+
my $parser = Spreadsheet::ParseXLSX->new(Password => '');
- my $workbook = $parser->parse($fh);
+ for my $input (@inputs) {
+ my $workbook = $parser->parse($input);
- my $worksheet = $workbook->worksheet(0);
- my $cell = $worksheet->get_cell(22, 8);
- is($cell->value, 1911);
+ my $worksheet = $workbook->worksheet(0);
+ my $cell = $worksheet->get_cell(22, 8);
+ is($cell->value, 1911);
+ }
}
done_testing;