Excel::Template::Element::MergeRange - Excel::Template::Element::MergeRange


Excel-Template documentation Contained in the Excel-Template distribution.

Index


Code Index:

NAME

Top

Excel::Template::Element::MergeRange - Excel::Template::Element::MergeRange

PURPOSE

Top

To merge a range of cells in a spreadsheet

NODE NAME

Top

MERGE_RANGE

INHERITANCE

Top

ELEMENT

EFFECTS

Top

This will merge a range of cells.

DEPENDENCIES

Top

None

USAGE

Top

  <cell ref="foo"/>
  <cell ref="foo"/>
  <cell ref="foo"/>    
  <merge_range ref="foo">Text to insert into merged range</merge_range>

AUTHOR

Top

Stevan Little (stevan.little@iinteractive.com)

SEE ALSO

Top

Nothing


Excel-Template documentation Contained in the Excel-Template distribution.

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__