Commit | Line | Data |
ddb9abcf |
1 | package Excel::Template::Element::MergeRange; |
2 | |
3 | use strict; |
4 | |
5 | BEGIN { |
6 | use vars qw(@ISA); |
c1e4ae46 |
7 | @ISA = qw(Excel::Template::Element::Cell); |
ddb9abcf |
8 | |
c1e4ae46 |
9 | use Excel::Template::Element::Cell; |
ddb9abcf |
10 | use Excel::Template::Element::Range; |
11 | } |
12 | |
13 | sub render { |
14 | my $self = shift; |
15 | my ($context) = @_; |
2feb13f6 |
16 | |
ddb9abcf |
17 | my $ref_name = $context->resolve($self, 'REF'); |
18 | |
19 | my @refs = $context->get_all_references( $ref_name ); |
20 | (@refs) |
2feb13f6 |
21 | || die "You must specify a ref for MERGE_RANGE"; |
22 | |
ddb9abcf |
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. |
2feb13f6 |
31 | |
ddb9abcf |
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 | |
cbac675a |
39 | # force is_merged on here to differentiate the formats |
40 | $values{is_merged} = 1; |
41 | |
ddb9abcf |
42 | my $format = $context->format_object->copy( |
43 | $context, $old_format, %values, |
44 | ); |
2feb13f6 |
45 | $context->active_format($format); |
ddb9abcf |
46 | |
2feb13f6 |
47 | $context->active_worksheet->merge_range( |
48 | $range, |
c1e4ae46 |
49 | $self->_get_text($context), |
ddb9abcf |
50 | $format, |
51 | ); |
2feb13f6 |
52 | |
53 | $context->active_format($old_format); |
ddb9abcf |
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"/> |
c1e4ae46 |
89 | <cell ref="foo"/> |
ddb9abcf |
90 | <merge_range ref="foo">Text to insert into merged range</merge_range> |
91 | |
c1e4ae46 |
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 | |
ddb9abcf |
109 | =head1 AUTHOR |
110 | |
111 | Stevan Little (stevan.little@iinteractive.com) |
112 | |
113 | =head1 SEE ALSO |
114 | |
115 | Nothing |
116 | |
117 | =cut |