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 ++++++++++++++++++++++++++++++++-- t/data/page-Setup.xlsx | Bin 0 -> 9185 bytes t/page-Setup.t | 40 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 72 insertions(+), 2 deletions(-) create mode 100644 t/data/page-Setup.xlsx create mode 100644 t/page-Setup.t 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, diff --git a/t/data/page-Setup.xlsx b/t/data/page-Setup.xlsx new file mode 100644 index 0000000..b0383a3 Binary files /dev/null and b/t/data/page-Setup.xlsx differ diff --git a/t/page-Setup.t b/t/page-Setup.t new file mode 100644 index 0000000..5f0df1d --- /dev/null +++ b/t/page-Setup.t @@ -0,0 +1,40 @@ +#!/usr/bin/env perl +use strict; +use warnings; +use Test::More; + +use Spreadsheet::ParseXLSX; + +my $wb = Spreadsheet::ParseXLSX->new->parse('t/data/page-Setup.xlsx'); + +my $ws1 = $wb->worksheet(0); + +# Header/Footer Text +is($ws1->{header}, '&CHeader'); +is($ws1->{footer}, '&CFooter'); + +# Margins +is($ws1->{pageMargins}{header}, '0.3'); +is($ws1->{pageMargins}{footer}, '0.4'); +is($ws1->{pageMargins}{left}, '0.5'); +is($ws1->{pageMargins}{right}, '0.6'); +is($ws1->{pageMargins}{top}, '0.7'); +is($ws1->{pageMargins}{bottom}, '0.8'); + +# Page Setup +is($ws1->{pageSetup}{scale}, '75'); +is($ws1->{pageSetup}{orientation}, 'landscape'); +is($ws1->{pageSetup}{paperSize}, '4'); # Code for 11*17 + +# Cell Border Formatting +is($ws1->get_cell(0,0)->get_format()->{'BdrDiag'}[0], 1); +is($ws1->get_cell(0,1)->get_format()->{'BdrDiag'}[0], 2); +is($ws1->get_cell(0,2)->get_format()->{'BdrDiag'}[0], 3); +is($ws1->get_cell(0,0)->get_format()->{'BdrDiag'}[1], 6); # Double Line +is($ws1->get_cell(0,0)->get_format()->{'BdrDiag'}[2], '#FF0000'); # Red + +is($ws1->get_cell(2,0)->get_format()->{'Rotate'}, 90); +is($ws1->get_cell(3,0)->get_format()->{'Shrink'}, 1); +is($ws1->get_cell(4,0)->get_format()->{'Indent'}, 1); + +done_testing; -- cgit v1.2.3-54-g00ecf