diff options
author | Jason <jason@socialflow.com> | 2013-08-28 15:16:28 +0000 |
---|---|---|
committer | Jason <jason@socialflow.com> | 2013-08-28 15:16:28 +0000 |
commit | 2d06ee894a3e5cd139bde1a88095c33772283e99 (patch) | |
tree | 9547431e882c1454895b47dfd95a3ef3a939f1e9 /lib/Spreadsheet/Template | |
parent | da21e2cca6a714c09b35115ac9e51f39f21f3d40 (diff) | |
download | spreadsheet-template-2d06ee894a3e5cd139bde1a88095c33772283e99.tar.gz spreadsheet-template-2d06ee894a3e5cd139bde1a88095c33772283e99.zip |
merge now supports formulas, and adjusted test
Diffstat (limited to 'lib/Spreadsheet/Template')
-rw-r--r-- | lib/Spreadsheet/Template/Helpers/Xslate.pm | 22 | ||||
-rw-r--r-- | lib/Spreadsheet/Template/Writer/Excel.pm | 30 |
2 files changed, 36 insertions, 16 deletions
diff --git a/lib/Spreadsheet/Template/Helpers/Xslate.pm b/lib/Spreadsheet/Template/Helpers/Xslate.pm index d4238e9..bf9b435 100644 --- a/lib/Spreadsheet/Template/Helpers/Xslate.pm +++ b/lib/Spreadsheet/Template/Helpers/Xslate.pm @@ -32,13 +32,21 @@ sub format { } sub merge { - my ($package, $range, $contents, $format) = @_; - - return $JSON->encode({ - range => "$range", - contents => "$contents", - format => _formats($package, $format) - }); + my ($package, $contents, $format, $type, $range, %args) = @_; + + return $JSON->encode( + { + contents => "$contents", + format => _formats( $package, $format ), + type => $type, + range => "$range", + ( + defined $args{formula} + ? ( formula => $args{formula} ) + : () + ), + } + ); } sub c { diff --git a/lib/Spreadsheet/Template/Writer/Excel.pm b/lib/Spreadsheet/Template/Writer/Excel.pm index da54cea..d24b3ae 100644 --- a/lib/Spreadsheet/Template/Writer/Excel.pm +++ b/lib/Spreadsheet/Template/Writer/Excel.pm @@ -153,24 +153,36 @@ sub _write_worksheet { } } - if (exists $data->{merge}) { - for my $i (0..$#{ $data->{merge} }) { - my $merge = $data->{merge}[$i]; + if ( exists $data->{merge} ) { + for my $i ( 0 .. $#{ $data->{merge} } ) { + my $merge = $data->{merge}[$i]; my $format = $merge->{format}; my $format_obj; - if (exists $self->_formats->{$format}) { - $format_obj = $self->_formats->{$format}; + if ( exists $self->_formats->{$format} ) { + $format_obj = $self->_formats->{$format}; } else { $format_obj = $self->excel->add_format(%$format); $self->_formats->{$format} = $format_obj; } - $sheet->merge_range($merge->{range}, $merge->{contents}, $format_obj); + + $merge->{type} = 'formula' if defined $merge->{formula}; + + $sheet->merge_range_type( + $merge->{type}, + $merge->{range}, + defined $merge->{formula} + ? $merge->{formula} + : $merge->{contents}, + $format_obj, + defined $merge->{formula} ? $merge->{contents} : () + ); } } - if (exists $data->{autofilter}) { - my @autofilter = @{$data->{autofilter}}; - $sheet->autofilter($autofilter[0], $autofilter[1], $autofilter[2], $autofilter[3]); + if ( exists $data->{autofilter} ) { + my @autofilter = @{ $data->{autofilter} }; + $sheet->autofilter( $autofilter[0], $autofilter[1], $autofilter[2], + $autofilter[3] ); } } |