From f1307d32345a36663a6f8fa453676efdd4f39171 Mon Sep 17 00:00:00 2001 From: Dave Clarke Date: Thu, 5 Mar 2015 14:20:04 -0500 Subject: Added Parsing for Page Setup, Diagonal Borders Modifed ParseXLSX.pm to parse Page Setup , margins, and also parsing of diagonal borders. Also added new test script page-Setup.t --- lib/Spreadsheet/ParseXLSX.pm | 34 ++++++++++++++++++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) (limited to 'lib') diff --git a/lib/Spreadsheet/ParseXLSX.pm b/lib/Spreadsheet/ParseXLSX.pm index 082228a..edab490 100644 --- a/lib/Spreadsheet/ParseXLSX.pm +++ b/lib/Spreadsheet/ParseXLSX.pm @@ -164,6 +164,33 @@ sub _parse_sheet { $twig->purge; }, + 'headerFooter' => sub { + my ($twig, $hf) = @_; + + $sheet->{header} = $hf->first_child('oddHeader')->text // ''; + $sheet->{footer} = $hf->first_child('oddFooter')->text // ''; + + $twig->purge; + }, + + 'pageMargins' => sub { + my ($twig, $margin) = @_; + map { + $sheet->{pageMargins}->{$_} = $margin->att($_) // 0 + } qw(left right top bottom header footer); + + $twig->purge; + }, + + 'pageSetup' => sub { + my ($twig, $setup) = @_; + map { + $sheet->{pageSetup}->{$_} = $setup->att($_) // 0 + } qw(scale orientation horizontalDpi verticalDpi paperSize firstPageNumber scale); + + $twig->purge; + }, + 'mergeCells/mergeCell' => sub { my ( $twig, $merge_area ) = @_; @@ -478,8 +505,8 @@ sub _parse_styles { } qw(left right top bottom) ], diagonal => [ - 0, # XXX ->att('diagonalDown') and ->att('diagonalUp') - 0, # XXX ->att('style') + ($border->att('diagonalDown') // 0) * 2 + ($border->att('diagonalUp') // 0), + $border{ $border->first_child('diagonal')->att('style') || 'none' }, $self->_color( $workbook->{Color}, $border->first_child('diagonal')->first_child('color') @@ -607,9 +634,12 @@ sub _parse_styles { : 2, # JustLast => $iJustL, # Rotate => $iRotate, + Rotate => $alignment ? $alignment->att('textRotation') : 0, # Indent => $iInd, + Indent => $alignment ? $alignment->att('indent') : 0, # Shrink => $iShrink, + Shrink => $alignment ? $alignment->att('shrinkToFit') : 0, # Merge => $iMerge, # ReadDir => $iReadDir, -- cgit v1.2.3-54-g00ecf From cf65e27c62d53f0097851b76e29b659df366b08a Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Sun, 15 Mar 2015 00:48:52 -0400 Subject: don't call ->text on the element if it doesn't exist --- lib/Spreadsheet/ParseXLSX.pm | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'lib') diff --git a/lib/Spreadsheet/ParseXLSX.pm b/lib/Spreadsheet/ParseXLSX.pm index edab490..ac33514 100644 --- a/lib/Spreadsheet/ParseXLSX.pm +++ b/lib/Spreadsheet/ParseXLSX.pm @@ -167,8 +167,13 @@ sub _parse_sheet { 'headerFooter' => sub { my ($twig, $hf) = @_; - $sheet->{header} = $hf->first_child('oddHeader')->text // ''; - $sheet->{footer} = $hf->first_child('oddFooter')->text // ''; + my ($helem, $felem) = map { + $hf->first_child($_) + } qw(oddHeader oddFooter); + $sheet->{header} = $helem->text + if $helem; + $sheet->{footer} = $felem->text + if $felem; $twig->purge; }, -- cgit v1.2.3-54-g00ecf From 39d4f196204cd8db8f462cd5405f811505f561c0 Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Sun, 15 Mar 2015 00:58:54 -0400 Subject: handle other valid booleans for diagonalDown and diagonalUp the spec allows for 1/0/true/false, so need to make sure they're all handled --- lib/Spreadsheet/ParseXLSX.pm | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) (limited to 'lib') diff --git a/lib/Spreadsheet/ParseXLSX.pm b/lib/Spreadsheet/ParseXLSX.pm index ac33514..619ba3c 100644 --- a/lib/Spreadsheet/ParseXLSX.pm +++ b/lib/Spreadsheet/ParseXLSX.pm @@ -493,6 +493,12 @@ sub _parse_styles { my @borders = map { my $border = $_; + my ($ddiag, $udiag) = map { + my $v = $border->att($_) // 0; + $v = 1 if $v eq 'true'; + $v = 0 if $v eq 'false'; + $v + } qw(diagonalDown diagonalUp); # XXX specs say "begin" and "end" rather than "left" and "right", # but... that's not what seems to be in the file itself (sigh) { @@ -510,8 +516,11 @@ sub _parse_styles { } qw(left right top bottom) ], diagonal => [ - ($border->att('diagonalDown') // 0) * 2 + ($border->att('diagonalUp') // 0), - $border{ $border->first_child('diagonal')->att('style') || 'none' }, + ( $ddiag && $udiag ? 3 + : $ddiag && !$udiag ? 2 + : !$ddiag && $udiag ? 1 + : 0), + $border{$border->first_child('diagonal')->att('style') || 'none'}, $self->_color( $workbook->{Color}, $border->first_child('diagonal')->first_child('color') -- cgit v1.2.3-54-g00ecf