summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.travis.yml2
-rw-r--r--lib/Spreadsheet/ParseXLSX.pm50
-rw-r--r--t/bug-16.t (renamed from t/bug-lock.t)2
-rw-r--r--t/bug-17.t14
-rw-r--r--t/data/bug-16.xlsx (renamed from t/data/bug-lock.xlsx)bin8480 -> 8480 bytes
-rw-r--r--t/data/bug-17a.xlsxbin0 -> 7825 bytes
-rw-r--r--t/data/bug-17b.xlsxbin0 -> 7817 bytes
-rw-r--r--t/data/page-Setup.xlsxbin0 -> 9185 bytes
-rw-r--r--t/page-Setup.t40
9 files changed, 103 insertions, 5 deletions
diff --git a/.travis.yml b/.travis.yml
index 655229f..e649e7e 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,6 +1,6 @@
language: perl
perl:
- - "5.19"
+ - "5.20"
- "5.18"
- "5.16"
- "5.14"
diff --git a/lib/Spreadsheet/ParseXLSX.pm b/lib/Spreadsheet/ParseXLSX.pm
index 26269fd..7f9b4ef 100644
--- a/lib/Spreadsheet/ParseXLSX.pm
+++ b/lib/Spreadsheet/ParseXLSX.pm
@@ -82,7 +82,7 @@ sub _parse_workbook {
: (""));
}
- $workbook->{Flag1904} = $properties && $properties->att('date1904') ? 1 : 0;
+ $workbook->{Flg1904} = $properties && $properties->att('date1904') ? 1 : 0;
$workbook->{FmtClass} = $formatter || Spreadsheet::ParseExcel::FmtDefault->new;
@@ -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 ) = @_;
@@ -469,6 +501,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)
{
@@ -486,8 +524,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')
@@ -615,9 +656,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/bug-lock.t b/t/bug-16.t
index 142d003..8ee9b6d 100644
--- a/t/bug-lock.t
+++ b/t/bug-16.t
@@ -5,7 +5,7 @@ use Test::More;
use Spreadsheet::ParseXLSX;
-my $wb = Spreadsheet::ParseXLSX->new->parse('t/data/bug-lock.xlsx');
+my $wb = Spreadsheet::ParseXLSX->new->parse('t/data/bug-16.xlsx');
my $ws = $wb->worksheet(0);
my $b1 = $ws->get_cell(0, 0);
diff --git a/t/bug-17.t b/t/bug-17.t
new file mode 100644
index 0000000..fb77b26
--- /dev/null
+++ b/t/bug-17.t
@@ -0,0 +1,14 @@
+#!/usr/bin/env perl
+use strict;
+use warnings;
+use Test::More;
+
+use Spreadsheet::ParseXLSX;
+
+my $wba = Spreadsheet::ParseXLSX->new->parse('t/data/bug-17a.xlsx');
+ok($wba->using_1904_date);
+
+my $wbb = Spreadsheet::ParseXLSX->new->parse('t/data/bug-17b.xlsx');
+ok(!$wbb->using_1904_date);
+
+done_testing;
diff --git a/t/data/bug-lock.xlsx b/t/data/bug-16.xlsx
index bf16fdb..bf16fdb 100644
--- a/t/data/bug-lock.xlsx
+++ b/t/data/bug-16.xlsx
Binary files differ
diff --git a/t/data/bug-17a.xlsx b/t/data/bug-17a.xlsx
new file mode 100644
index 0000000..7d8680c
--- /dev/null
+++ b/t/data/bug-17a.xlsx
Binary files differ
diff --git a/t/data/bug-17b.xlsx b/t/data/bug-17b.xlsx
new file mode 100644
index 0000000..f58508a
--- /dev/null
+++ b/t/data/bug-17b.xlsx
Binary files differ
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;