summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStuart Watt <stuart@morungos.com>2015-09-01 14:36:31 -0400
committerStuart Watt <stuart@morungos.com>2015-09-01 14:36:31 -0400
commit44f6095337975eb5bc004a45e1147d0ba4652753 (patch)
tree5fdb5bf3f26ec3be2a5f513241e0f69a9ff6df65
parent53bf90652bf21ba5ed934af67e37737b7ffa2b1a (diff)
downloadspreadsheet-parsexlsx-44f6095337975eb5bc004a45e1147d0ba4652753.tar.gz
spreadsheet-parsexlsx-44f6095337975eb5bc004a45e1147d0ba4652753.zip
Don't parse sheets where there's no extracted file. See #38
See discussion at: https://github.com/doy/spreadsheet-parsexlsx/issues/38. The patch is a little different from the minimal one suggested initially, because we probably don't even want to return a sheet when we can't parse it.
-rw-r--r--lib/Spreadsheet/ParseXLSX.pm18
-rw-r--r--t/bug-38.t11
-rw-r--r--t/data/bug-38.xlsxbin0 -> 12338 bytes
3 files changed, 22 insertions, 7 deletions
diff --git a/lib/Spreadsheet/ParseXLSX.pm b/lib/Spreadsheet/ParseXLSX.pm
index 1698acd..cb20013 100644
--- a/lib/Spreadsheet/ParseXLSX.pm
+++ b/lib/Spreadsheet/ParseXLSX.pm
@@ -110,13 +110,17 @@ sub _parse_workbook {
my @sheets = map {
my $idx = $_->att('r:id');
- my $sheet = Spreadsheet::ParseExcel::Worksheet->new(
- Name => $_->att('name'),
- _Book => $workbook,
- _SheetNo => $idx,
- );
- $self->_parse_sheet($sheet, $files->{sheets}{$idx});
- $sheet
+ if ($files->{sheets}{$idx}) {
+ my $sheet = Spreadsheet::ParseExcel::Worksheet->new(
+ Name => $_->att('name'),
+ _Book => $workbook,
+ _SheetNo => $idx,
+ );
+ $self->_parse_sheet($sheet, $files->{sheets}{$idx});
+ ($sheet)
+ } else {
+ ()
+ }
} $files->{workbook}->find_nodes('//sheets/sheet');
$workbook->{Worksheet} = \@sheets;
diff --git a/t/bug-38.t b/t/bug-38.t
new file mode 100644
index 0000000..fa61176
--- /dev/null
+++ b/t/bug-38.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-38.xlsx');
+pass('it parses successfully');
+
+done_testing;
diff --git a/t/data/bug-38.xlsx b/t/data/bug-38.xlsx
new file mode 100644
index 0000000..be360b4
--- /dev/null
+++ b/t/data/bug-38.xlsx
Binary files differ