package Excel::Template::Element::MergeRange;
use strict;
BEGIN {
use vars qw(@ISA);
@ISA = qw(Excel::Template::Element);
use Excel::Template::Element;
use Excel::Template::Element::Range;
}
sub render {
my $self = shift;
my ($context) = @_;
my $ref_name = $context->resolve($self, 'REF');
my @refs = $context->get_all_references( $ref_name );
(@refs)
|| die "You must specify a ref for MERGE_RANGE";
my $range = Excel::Template::Element::Range->_join_refs(@refs);
# NOTE:
# we need to copy the current format
# because Spreadsheet::WriteExcel will
# mark any format used in a merged cell
# as being specifically for a merged cell
# and therefore not usable elsewhere.
my $old_format = $context->active_format;
my %values;
while ( my ($k, $v) = each %$self ) {
$values{$k} = $context->resolve( $self, $k );
}
my $format = $context->format_object->copy(
$context, $old_format, %values,
);
$context->active_format($format);
$context->active_worksheet->merge_range(
$range,
$context->get($self, 'TEXT'),
$format,
);
$context->active_format($old_format);
return 1;
}
1;
__END__
=head1 NAME
Excel::Template::Element::MergeRange - Excel::Template::Element::MergeRange
=head1 PURPOSE
To merge a range of cells in a spreadsheet
=head1 NODE NAME
MERGE_RANGE
=head1 INHERITANCE
L<ELEMENT|Excel::Template::Element>
=head1 EFFECTS
This will merge a range of cells.
=head1 DEPENDENCIES
None
=head1 USAGE
<cell ref="foo"/>
<cell ref="foo"/>
<cell ref="foo"/>
<merge_range ref="foo">Text to insert into merged range</merge_range>
=head1 AUTHOR
Stevan Little (stevan.little@iinteractive.com)
=head1 SEE ALSO
Nothing
=cut