e8b72dd0330493b6dc9e2daf2b7dc57cce73e97c
[p5sagit/Excel-Template.git] / lib / Excel / Template / Element / MergeRange.pm
1 package Excel::Template::Element::MergeRange;
2
3 use strict;
4
5 BEGIN {
6     use vars qw(@ISA);
7     @ISA = qw(Excel::Template::Element);
8
9     use Excel::Template::Element;
10     use Excel::Template::Element::Range;
11 }
12
13 sub render {
14     my $self = shift;
15     my ($context) = @_;
16
17     my $ref_name = $context->resolve($self, 'REF');
18
19     my @refs = $context->get_all_references( $ref_name );
20     (@refs)
21         || die "You must specify a ref for MERGE_RANGE";
22
23     my $range = Excel::Template::Element::Range->_join_refs(@refs);
24
25     # NOTE:
26     # we need to copy the current format
27     # because Spreadsheet::WriteExcel will 
28     # mark any format used in a merged cell
29     # as being specifically for a merged cell
30     # and therefore not usable elsewhere.
31
32     my $old_format = $context->active_format;
33
34     my %values;
35     while ( my ($k, $v) = each %$self ) {
36         $values{$k} = $context->resolve( $self, $k );
37     }
38
39     # force is_merged on here to differentiate the formats
40     $values{is_merged} = 1;
41
42     my $format = $context->format_object->copy(
43         $context, $old_format, %values,
44     );
45     $context->active_format($format);
46
47     $context->active_worksheet->merge_range(
48         $range,
49         $context->get($self, 'TEXT'),
50         $format,
51     );
52
53     $context->active_format($old_format);
54
55     return 1;
56 }
57
58 1;
59 __END__
60
61 =head1 NAME
62
63 Excel::Template::Element::MergeRange - Excel::Template::Element::MergeRange
64
65 =head1 PURPOSE
66
67 To merge a range of cells in a spreadsheet
68
69 =head1 NODE NAME
70
71 MERGE_RANGE
72
73 =head1 INHERITANCE
74
75 L<ELEMENT|Excel::Template::Element>
76
77 =head1 EFFECTS
78
79 This will merge a range of cells.
80
81 =head1 DEPENDENCIES
82
83 None
84
85 =head1 USAGE
86
87   <cell ref="foo"/>
88   <cell ref="foo"/>
89   <cell ref="foo"/>    
90   <merge_range ref="foo">Text to insert into merged range</merge_range>
91
92 =head1 AUTHOR
93
94 Stevan Little (stevan.little@iinteractive.com)
95
96 =head1 SEE ALSO
97
98 Nothing
99
100 =cut