summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJason <jason@socialflow.com>2013-08-27 14:01:50 +0000
committerJason <jason@socialflow.com>2013-08-27 14:01:50 +0000
commitc41829e1b87eb19d80776d422938f7fff25f3c76 (patch)
tree742d3cbcb027f8484294bfc2ba305b1a39de6f51
parent72cb31cbc57dbe60a1cd4e069569eb1fd3472006 (diff)
downloadspreadsheet-template-c41829e1b87eb19d80776d422938f7fff25f3c76.tar.gz
spreadsheet-template-c41829e1b87eb19d80776d422938f7fff25f3c76.zip
documentation for merge helper function and added a test demonstrating functionality
-rw-r--r--lib/Spreadsheet/Template/Helpers/Xslate.pm1
-rw-r--r--lib/Spreadsheet/Template/Processor/Xslate.pm7
-rw-r--r--t/data/merge.json27
-rw-r--r--t/merge.t46
-rw-r--r--t/template.t2
5 files changed, 82 insertions, 1 deletions
diff --git a/lib/Spreadsheet/Template/Helpers/Xslate.pm b/lib/Spreadsheet/Template/Helpers/Xslate.pm
index df99a85..d4238e9 100644
--- a/lib/Spreadsheet/Template/Helpers/Xslate.pm
+++ b/lib/Spreadsheet/Template/Helpers/Xslate.pm
@@ -76,6 +76,7 @@ sub _curry_package {
format
c
+ merge
true
false
diff --git a/lib/Spreadsheet/Template/Processor/Xslate.pm b/lib/Spreadsheet/Template/Processor/Xslate.pm
index f0a7cf9..1454e30 100644
--- a/lib/Spreadsheet/Template/Processor/Xslate.pm
+++ b/lib/Spreadsheet/Template/Processor/Xslate.pm
@@ -39,6 +39,13 @@ C<"date_time">, and C<%args> contains any other parameters (such as C<formula>,
for instance) to declare for the cell. C<$type> is optional, and if not passed,
defaults to C<"string">.
+=item merge($range, $content, $format)
+
+Returns representation of a range of cells to be merged. C<$range> is the
+Excel representation of a range of cells, ex: "A1:B10". C<$content> is the
+content to be placed in the merged cell. C<$format> is the name of a format
+declared with the C<format> helper or a hashref of format options.
+
=item true
Returns C<JSON::true>.
diff --git a/t/data/merge.json b/t/data/merge.json
new file mode 100644
index 0000000..2a86bdf
--- /dev/null
+++ b/t/data/merge.json
@@ -0,0 +1,27 @@
+%% my $default = { color => '#000000', size => 14 };
+%% format(basic => $default.merge({bold => true()}));
+
+{
+ "selection" : 0,
+ "worksheets" : [
+ {
+ "column_widths" : [ 14.6, 18.5, 15.8, 12.2 ],
+ "name" : "Merge Report 1",
+ "selection" : [ 1, 9 ],
+ "row_heights" : [ 25, 18, 18, 18 ],
+ "cells" : [
+ %% for $rows -> $row {
+ [
+ [% c($row.value1, "basic") %],
+ [% c($row.value2, "basic") %],
+ [% c($row.value3, "basic") %],
+ [% c($row.value4, "basic") %]
+ ]
+ %% }
+ ],
+ "merge" : [
+ [% merge('A1:D1', 'Merged Cells', 'basic') %]
+ ]
+ }
+ ]
+}
diff --git a/t/merge.t b/t/merge.t
new file mode 100644
index 0000000..0564deb
--- /dev/null
+++ b/t/merge.t
@@ -0,0 +1,46 @@
+#!/usr/bin/env perl
+use strict;
+use warnings;
+use Test::More;
+
+use Data::Dumper;
+
+use Spreadsheet::ParseXLSX;
+use Spreadsheet::Template;
+
+my $template = Spreadsheet::Template->new;
+my $data = do { local $/; local @ARGV = ('t/data/merge.json'); <> };
+
+{
+
+ my $excel = $template->render(
+ $data,
+ {
+ rows => [
+ {
+ value1 => "Merge 1",
+ value2 => "Merge 2",
+ value3 => "Merge 3",
+ value4 => "Merge 4"
+ }
+ ],
+ }
+ );
+
+ open my $fh, '<', \$excel;
+ my $wb = Spreadsheet::ParseXLSX->new->parse($fh);
+ is($wb->worksheet_count, 1);
+
+ my $ws = $wb->worksheet(0);
+ is($ws->get_name, 'Merge Report 1');
+
+ for my $col (0..3) {
+ if ($col == 0) {
+ is($ws->get_cell(0, $col)->value, 'Merged Cells');
+ } else {
+ is($ws->get_cell(0, $col)->value, '');
+ }
+ }
+}
+
+done_testing;
diff --git a/t/template.t b/t/template.t
index 86d5005..63ddf34 100644
--- a/t/template.t
+++ b/t/template.t
@@ -7,7 +7,7 @@ use Spreadsheet::ParseXLSX;
use Spreadsheet::Template;
my $template = Spreadsheet::Template->new;
-my $data = do { local $/; local @ARGV = ('t/data/template.json'); <> };
+my $data = do { local $/; local @ARGV = ('t/data/merge.json'); <> };
{
my $excel = $template->render(
$data,