From 90ca90b8e8f2dafc2befb8c5ddba1eea8e4eebf3 Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Mon, 16 Sep 2013 23:35:00 -0400 Subject: fix row and column range for empty sheets (fixes #8) --- lib/Spreadsheet/ParseXLSX.pm | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) (limited to 'lib/Spreadsheet/ParseXLSX.pm') diff --git a/lib/Spreadsheet/ParseXLSX.pm b/lib/Spreadsheet/ParseXLSX.pm index a7db72b..0dca08a 100644 --- a/lib/Spreadsheet/ParseXLSX.pm +++ b/lib/Spreadsheet/ParseXLSX.pm @@ -126,18 +126,28 @@ sub _parse_sheet { my $self = shift; my ($sheet, $sheet_xml) = @_; - # XXX need a fallback here, the dimension tag is optional - my ($dimension) = $sheet_xml->find_nodes('//dimension'); - my ($rmin, $cmin, $rmax, $cmax) = $self->_dimensions( - $dimension->att('ref') - ); + my @cells = $sheet_xml->find_nodes('//sheetData/row/c'); + + if (@cells) { + # XXX need a fallback here, the dimension tag is optional + my ($dimension) = $sheet_xml->find_nodes('//dimension'); + my ($rmin, $cmin, $rmax, $cmax) = $self->_dimensions( + $dimension->att('ref') + ); - $sheet->{MinRow} = $rmin; - $sheet->{MinCol} = $cmin; - $sheet->{MaxRow} = $rmax; - $sheet->{MaxCol} = $cmax; + $sheet->{MinRow} = $rmin; + $sheet->{MinCol} = $cmin; + $sheet->{MaxRow} = $rmax; + $sheet->{MaxCol} = $cmax; + } + else { + $sheet->{MinRow} = 0; + $sheet->{MinCol} = 0; + $sheet->{MaxRow} = -1; + $sheet->{MaxCol} = -1; + } - for my $cell ($sheet_xml->find_nodes('//sheetData/row/c')) { + for my $cell (@cells) { my ($row, $col) = $self->_cell_to_row_col($cell->att('r')); my $val = $cell->first_child('v') ? $cell->first_child('v')->text -- cgit v1.2.3-54-g00ecf