summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDave Clarke <david_clarke@verizon.net>2015-03-05 14:20:04 -0500
committerDave Clarke <david_clarke@verizon.net>2015-03-05 14:20:04 -0500
commitf1307d32345a36663a6f8fa453676efdd4f39171 (patch)
treec1411cda3e94d39bd5a5c1ff556c2bf8841d49c8
parentc48aba2416230ad6f9fa792a256e2983ce863b98 (diff)
downloadspreadsheet-parsexlsx-f1307d32345a36663a6f8fa453676efdd4f39171.tar.gz
spreadsheet-parsexlsx-f1307d32345a36663a6f8fa453676efdd4f39171.zip
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
-rw-r--r--lib/Spreadsheet/ParseXLSX.pm34
-rw-r--r--t/data/page-Setup.xlsxbin0 -> 9185 bytes
-rw-r--r--t/page-Setup.t40
3 files changed, 72 insertions, 2 deletions
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
--- /dev/null
+++ b/t/data/page-Setup.xlsx
Binary files 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;