5b42714b826d29d3ff01e18aa153d28258788b48
[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     my $format = $context->format_object->copy(
40         $context, $old_format, %values,
41     );
42     $context->active_format($format); 
43
44     $context->active_worksheet->merge_range(  
45         $range, 
46         $context->get($self, 'TEXT'), 
47         $format,
48     );
49     
50     $context->active_format($old_format);    
51
52     return 1;
53 }
54
55 1;
56 __END__
57
58 =head1 NAME
59
60 Excel::Template::Element::MergeRange - Excel::Template::Element::MergeRange
61
62 =head1 PURPOSE
63
64 To merge a range of cells in a spreadsheet
65
66 =head1 NODE NAME
67
68 MERGE_RANGE
69
70 =head1 INHERITANCE
71
72 L<ELEMENT|Excel::Template::Element>
73
74 =head1 EFFECTS
75
76 This will merge a range of cells.
77
78 =head1 DEPENDENCIES
79
80 None
81
82 =head1 USAGE
83
84   <cell ref="foo"/>
85   <cell ref="foo"/>
86   <cell ref="foo"/>    
87   <merge_range ref="foo">Text to insert into merged range</merge_range>
88
89 =head1 AUTHOR
90
91 Stevan Little (stevan.little@iinteractive.com)
92
93 =head1 SEE ALSO
94
95 Nothing
96
97 =cut