summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2015-03-15 01:02:51 -0400
committerJesse Luehrs <doy@tozt.net>2015-03-15 01:02:51 -0400
commit26e4ae585b5a7a4a5af513d9dfb8b3b6509d7985 (patch)
treef795f09765fb517699c86905fe8d62e08e1050ab
parent5b7d7e818fe0027acdfb3fbe8fc0af69ef9a8f99 (diff)
parentd7ba76d9d05ed12512ccf7db7c5af574bac0d82d (diff)
downloadspreadsheet-parsexlsx-26e4ae585b5a7a4a5af513d9dfb8b3b6509d7985.tar.gz
spreadsheet-parsexlsx-26e4ae585b5a7a4a5af513d9dfb8b3b6509d7985.zip
Merge branch 'pull-35'
-rw-r--r--lib/Spreadsheet/ParseXLSX.pm48
-rw-r--r--t/data/page-Setup.xlsxbin0 -> 9185 bytes
-rw-r--r--t/page-Setup.t40
3 files changed, 86 insertions, 2 deletions
diff --git a/lib/Spreadsheet/ParseXLSX.pm b/lib/Spreadsheet/ParseXLSX.pm
index c12bace..fdaf2b7 100644
--- a/lib/Spreadsheet/ParseXLSX.pm
+++ b/lib/Spreadsheet/ParseXLSX.pm
@@ -164,6 +164,38 @@ sub _parse_sheet {
$twig->purge;
},
+ 'headerFooter' => sub {
+ my ($twig, $hf) = @_;
+
+ my ($helem, $felem) = map {
+ $hf->first_child($_)
+ } qw(oddHeader oddFooter);
+ $sheet->{header} = $helem->text
+ if $helem;
+ $sheet->{footer} = $felem->text
+ if $felem;
+
+ $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 ) = @_;
@@ -461,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)
{
@@ -478,8 +516,11 @@ sub _parse_styles {
} qw(left right top bottom)
],
diagonal => [
- 0, # XXX ->att('diagonalDown') and ->att('diagonalUp')
- 0, # XXX ->att('style')
+ ( $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')
@@ -607,9 +648,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..71cca22
--- /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;