diff options
author | Jason <jason@socialflow.com> | 2013-08-26 18:29:37 +0000 |
---|---|---|
committer | Jason <jason@socialflow.com> | 2013-08-26 18:29:37 +0000 |
commit | 054e6df977b85a589e0e21459e4494b18310b381 (patch) | |
tree | 8c7bd1694aba9aac24043616d1d4ba50cf288bd7 | |
parent | 2d7e783f638a37f5943058899a1504f397745f48 (diff) | |
download | spreadsheet-template-054e6df977b85a589e0e21459e4494b18310b381.tar.gz spreadsheet-template-054e6df977b85a589e0e21459e4494b18310b381.zip |
add support for merging cells and adding autofilter to a row
-rw-r--r-- | lib/Spreadsheet/Template/Helpers/Xslate.pm | 15 | ||||
-rw-r--r-- | lib/Spreadsheet/Template/Writer/Excel.pm | 23 |
2 files changed, 34 insertions, 4 deletions
diff --git a/lib/Spreadsheet/Template/Helpers/Xslate.pm b/lib/Spreadsheet/Template/Helpers/Xslate.pm index 2fd97be..c49cfa9 100644 --- a/lib/Spreadsheet/Template/Helpers/Xslate.pm +++ b/lib/Spreadsheet/Template/Helpers/Xslate.pm @@ -1,6 +1,7 @@ package Spreadsheet::Template::Helpers::Xslate; use strict; use warnings; +use Data::Dumper; use JSON; @@ -10,10 +11,10 @@ use Sub::Exporter 'build_exporter'; my $import = build_exporter({ exports => [ - map { $_ => \&_curry_package } qw(format c true false) + map { $_ => \&_curry_package } qw(format c merge true false) ], groups => { - default => [qw(format c true false)], + default => [qw(format c merge true false)], }, }); @@ -31,6 +32,16 @@ sub format { return ''; } +sub merge { + my ($package, $range, $contents, $format) = @_; + + return $JSON->encode({ + range => "$range", + contents => "$contents", + format => _formats($package, $format) + }); +} + sub c { my ($package, $contents, $format, $type, %args) = @_; diff --git a/lib/Spreadsheet/Template/Writer/Excel.pm b/lib/Spreadsheet/Template/Writer/Excel.pm index 82e6a32..2e9c3e2 100644 --- a/lib/Spreadsheet/Template/Writer/Excel.pm +++ b/lib/Spreadsheet/Template/Writer/Excel.pm @@ -152,6 +152,27 @@ sub _write_worksheet { $self->_write_cell($data->{cells}[$row][$col], $sheet, $row, $col); } } + + 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}; + } + else { + $format_obj = $self->excel->add_format(%$format); + $self->_formats->{$format} = $format_obj; + } + $sheet->merge_range($merge->{range}, $merge->{contents}, $format_obj); + } + } + if (exists $data->{autofilter}) { + my $row = $data->{autofilter}; + my $num_cols = scalar @{$data->{cells}[$data->{autofilter}]}; + $sheet->autofilter($row, 0, $row, $num_cols-1); + } } sub _write_cell { @@ -207,8 +228,6 @@ sub _write_cell { $format = $self->_format($properties); } - # XXX handle merged cells - if (defined $data->{formula}) { $sheet->write_formula( $row, $col, |