From 2bf66a5ae431e3072e4e890dc2324fe0af612d61 Mon Sep 17 00:00:00 2001 From: Jason Date: Wed, 28 Aug 2013 15:49:12 +0000 Subject: use row and column numbers instead of range for merge function --- lib/Spreadsheet/Template.pm | 8 +++++++- lib/Spreadsheet/Template/Helpers/Xslate.pm | 16 +++++++++++----- lib/Spreadsheet/Template/Processor/Xslate.pm | 6 +++--- lib/Spreadsheet/Template/Writer/Excel.pm | 5 ++++- t/data/merge.json | 6 ++++-- 5 files changed, 29 insertions(+), 12 deletions(-) diff --git a/lib/Spreadsheet/Template.pm b/lib/Spreadsheet/Template.pm index b0fe7c9..2e4fe61 100644 --- a/lib/Spreadsheet/Template.pm +++ b/lib/Spreadsheet/Template.pm @@ -107,7 +107,13 @@ been preprocessed is a JSON file, with a structure that looks like this: ] ], merge : [ - ["range":"A1:D1","contents":"Merged Contents","format": { "color":"#000000" }] + ["contents":"Merged Contents","format":{"color":#000000"}, + "type":"string", + "first_row": 0, + "first_col": 0, + "last_row" : 0, + "last_col" : 3 + ] ] } ] diff --git a/lib/Spreadsheet/Template/Helpers/Xslate.pm b/lib/Spreadsheet/Template/Helpers/Xslate.pm index bf9b435..e611f1d 100644 --- a/lib/Spreadsheet/Template/Helpers/Xslate.pm +++ b/lib/Spreadsheet/Template/Helpers/Xslate.pm @@ -32,14 +32,20 @@ sub format { } sub merge { - my ($package, $contents, $format, $type, $range, %args) = @_; + my ( + $package, $contents, $format, $type, $first_row, + $first_col, $last_row, $last_col, %args + ) = @_; return $JSON->encode( { - contents => "$contents", - format => _formats( $package, $format ), - type => $type, - range => "$range", + contents => "$contents", + format => _formats( $package, $format ), + type => $type, + first_row => $first_row, + first_col => $first_col, + last_row => $last_row, + last_col => $last_col, ( defined $args{formula} ? ( formula => $args{formula} ) diff --git a/lib/Spreadsheet/Template/Processor/Xslate.pm b/lib/Spreadsheet/Template/Processor/Xslate.pm index f59b597..fa57380 100644 --- a/lib/Spreadsheet/Template/Processor/Xslate.pm +++ b/lib/Spreadsheet/Template/Processor/Xslate.pm @@ -39,12 +39,12 @@ C<"date_time">, and C<%args> contains any other parameters (such as C, for instance) to declare for the cell. C<$type> is optional, and if not passed, defaults to C<"string">. -=item merge($content, $format, $type, $range, %args) +=item merge($content, $format, $type, $first_row, $first_col, $last_row, $last_col, %args) Returns representation of a range of cells to be merged. C<$content> is the content to be placed in the merged cell. C<$type> is either C<"string">, C<"number">, -or C<"date_time">. C<$range> is the Excel representation -of a range of cells, ex: "A1:B10". C<$format> is the name of a format +or C<"date_time">. C<$first_row>, C<$first_col>, C<$last_row>, C<$last_col> are zero-indexed +Excel row, column numbers. C<$format> is the name of a format declared with the C helper or a hashref of format options. C<%args> contains any other parameters (such as C, for instance) to declare for the cell. diff --git a/lib/Spreadsheet/Template/Writer/Excel.pm b/lib/Spreadsheet/Template/Writer/Excel.pm index d24b3ae..99f1b7e 100644 --- a/lib/Spreadsheet/Template/Writer/Excel.pm +++ b/lib/Spreadsheet/Template/Writer/Excel.pm @@ -170,7 +170,10 @@ sub _write_worksheet { $sheet->merge_range_type( $merge->{type}, - $merge->{range}, + $merge->{first_row}, + $merge->{first_col}, + $merge->{last_row}, + $merge->{last_col}, defined $merge->{formula} ? $merge->{formula} : $merge->{contents}, diff --git a/t/data/merge.json b/t/data/merge.json index 5dc32f3..f942b33 100644 --- a/t/data/merge.json +++ b/t/data/merge.json @@ -31,10 +31,12 @@ ] ], "merge" : [ - [% merge('Merged Header', 'basic', 'string','A1:D1') %], + [% merge('Merged Header', 'basic', 'string', 0,0,0,3) %], [% merge($rows.map(-> $a {$a.value1}).reduce(-> $a,$b {$a + $b}), 'basic', 'number', - 'A4:D4', formula => 'SUM(A2:A3)') %] + 3,0,3,3, + formula => 'SUM(A2:A3)' + ) %] ] } ] -- cgit v1.2.3-54-g00ecf