Fixed typo, HIDE_GRIDLINES instead of HIDE_GRIDLINE
[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::Cell);
8
9     use Excel::Template::Element::Cell;
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         $self->_get_text($context),
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 Or a cross rows:
93
94   <row>
95     <cell ref="foo"/>
96     <cell ref="foo"/>
97     <cell ref="foo"/>
98   </row>
99   <row>
100     <cell ref="foo"/>
101     <cell ref="foo"/>
102     <cell ref="foo"/>
103     <format>
104       <merge_range ref="foo">Text to insert into merged range</merge_range>
105     </format>
106   </row>
107
108
109 =head1 AUTHOR
110
111 Stevan Little (stevan.little@iinteractive.com)
112
113 =head1 SEE ALSO
114
115 Nothing
116
117 =cut