diff options
author | Jesse Luehrs <doy@tozt.net> | 2014-07-05 14:16:19 -0400 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2014-07-05 14:16:19 -0400 |
commit | 063a3ed5650df0e84af5ddfc3c909077d04159d5 (patch) | |
tree | fee9aa7b23946e8fe7cd486d8a95f1da1a91ab3f | |
parent | a723723da2f4f7155f2f01f42c2502cb65f71b4b (diff) | |
parent | 5bfde2e914636f99e5994c843dd158f6804e5db5 (diff) | |
download | spreadsheet-parsexlsx-063a3ed5650df0e84af5ddfc3c909077d04159d5.tar.gz spreadsheet-parsexlsx-063a3ed5650df0e84af5ddfc3c909077d04159d5.zip |
Merge branch 'pull-25'
-rw-r--r-- | lib/Spreadsheet/ParseXLSX.pm | 15 | ||||
-rw-r--r-- | t/bug-15.t | 2 | ||||
-rw-r--r-- | t/bug-lock.t | 26 | ||||
-rw-r--r-- | t/data/bug-lock.xlsx | bin | 0 -> 8480 bytes |
4 files changed, 35 insertions, 8 deletions
diff --git a/lib/Spreadsheet/ParseXLSX.pm b/lib/Spreadsheet/ParseXLSX.pm index 72c8793..99d3c33 100644 --- a/lib/Spreadsheet/ParseXLSX.pm +++ b/lib/Spreadsheet/ParseXLSX.pm @@ -33,17 +33,18 @@ sub new { bless {}, shift; } -=method parse($file) +=method parse($file, $formatter) Parses an XLSX file. Parsing errors throw an exception. C<$file> can be either a filename or an open filehandle. Returns a L<Spreadsheet::ParseExcel::Workbook> instance containing the parsed data. +The C<$formatter> argument is an optional formatter class as described in L<Spreadsheet::ParseExcel>. =cut sub parse { my $self = shift; - my ($file) = @_; + my ($file, $formatter) = @_; my $zip = Archive::Zip->new; my $workbook = Spreadsheet::ParseExcel::Workbook->new; @@ -62,12 +63,12 @@ sub parse { die "Argument to 'new' must be a filename or open filehandle"; } - return $self->_parse_workbook($zip, $workbook); + return $self->_parse_workbook($zip, $workbook, $formatter); } sub _parse_workbook { my $self = shift; - my ($zip, $workbook) = @_; + my ($zip, $workbook, $formatter) = @_; my $files = $self->_extract_files($zip); @@ -81,7 +82,7 @@ sub _parse_workbook { $workbook->{Flag1904} = $properties->att('date1904') ? 1 : 0; - $workbook->{FmtClass} = Spreadsheet::ParseExcel::FmtDefault->new; # XXX + $workbook->{FmtClass} = $formatter || Spreadsheet::ParseExcel::FmtDefault->new; my $themes = $self->_parse_themes((values %{ $files->{themes} })[0]); # XXX @@ -573,9 +574,9 @@ sub _parse_styles { Font => $font[$_->att('fontId')], FmtIdx => 0+$_->att('numFmtId'), - Lock => $protection + Lock => $protection && defined $protection->att('locked') ? $protection->att('locked') - : 0, + : 1, Hidden => $protection ? $protection->att('hidden') : 0, @@ -13,7 +13,7 @@ ok(exists $b2->get_format->{Hidden}); ok(exists $b2->get_format->{Lock}); ok($b2->get_format->{IgnoreProtection}); ok(!$b2->get_format->{Hidden}); -ok(!$b2->get_format->{Lock}); +ok($b2->get_format->{Lock}); my $b3 = $ws->get_cell(2, 1); ok(exists $b3->get_format->{Hidden}); diff --git a/t/bug-lock.t b/t/bug-lock.t new file mode 100644 index 0000000..142d003 --- /dev/null +++ b/t/bug-lock.t @@ -0,0 +1,26 @@ +#!/usr/bin/env perl +use strict; +use warnings; +use Test::More; + +use Spreadsheet::ParseXLSX; + +my $wb = Spreadsheet::ParseXLSX->new->parse('t/data/bug-lock.xlsx'); +my $ws = $wb->worksheet(0); + +my $b1 = $ws->get_cell(0, 0); +ok($b1->get_format->{Lock}); + +my $b2 = $ws->get_cell(1, 0); +ok(!$b2->get_format->{Lock}); + +my $b3 = $ws->get_cell(2, 0); +ok($b3->get_format->{Lock}); + +my $b4 = $ws->get_cell(3, 0); +ok(!$b4->get_format->{Lock}); + +my $b5 = $ws->get_cell(4, 0); +ok($b5->get_format->{Lock}); + +done_testing; diff --git a/t/data/bug-lock.xlsx b/t/data/bug-lock.xlsx Binary files differnew file mode 100644 index 0000000..bf16fdb --- /dev/null +++ b/t/data/bug-lock.xlsx |