diff options
author | Jesse Luehrs <doy@tozt.net> | 2013-09-16 23:35:00 -0400 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2013-09-16 23:35:00 -0400 |
commit | 90ca90b8e8f2dafc2befb8c5ddba1eea8e4eebf3 (patch) | |
tree | fc893aaaaf3fdca335ae99ee5cdcf84b693310d0 /lib/Spreadsheet/ParseXLSX.pm | |
parent | 184bd929cdd7059c5387c2e753ab63731020d537 (diff) | |
download | spreadsheet-parsexlsx-90ca90b8e8f2dafc2befb8c5ddba1eea8e4eebf3.tar.gz spreadsheet-parsexlsx-90ca90b8e8f2dafc2befb8c5ddba1eea8e4eebf3.zip |
fix row and column range for empty sheets (fixes #8)
Diffstat (limited to 'lib/Spreadsheet/ParseXLSX.pm')
-rw-r--r-- | lib/Spreadsheet/ParseXLSX.pm | 30 |
1 files changed, 20 insertions, 10 deletions
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 |