summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJason <jason@socialflow.com>2013-08-26 18:29:37 +0000
committerJason <jason@socialflow.com>2013-08-26 18:29:37 +0000
commit054e6df977b85a589e0e21459e4494b18310b381 (patch)
tree8c7bd1694aba9aac24043616d1d4ba50cf288bd7
parent2d7e783f638a37f5943058899a1504f397745f48 (diff)
downloadspreadsheet-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.pm15
-rw-r--r--lib/Spreadsheet/Template/Writer/Excel.pm23
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,