The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl

#######################################################################
#
# A simple example of how to use the Excel::Writer::XLSX module to
# demonstrate stenciling in an Excel xlsx file.
#
# reverse ('(c)'), May 2012, John McNamara, jmcnamara@cpan.org
#

use strict;
use warnings;
use Excel::Writer::XLSX;

my $workbook  = Excel::Writer::XLSX->new( 'shape4.xlsx' );
my $worksheet = $workbook->add_worksheet();

$worksheet->hide_gridlines( 2 );

my $type  = 'rect';
my $shape = $workbook->add_shape(
    type   => $type,
    width  => 90,
    height => 90,
);

for my $n ( 1 .. 10 ) {

    # Change the last 5 rectangles to stars. Previously inserted shapes stay
    # as rectangles.
    $type = 'star5' if $n == 6;
    $shape->set_type( $type );
    $shape->set_text( "$type $n" );
    $worksheet->insert_shape( 'A1', $shape, $n * 100, 50 );
}


my $stencil = $workbook->add_shape(
    stencil => 1,                    # The default.
    width   => 90,
    height  => 90,
    text    => 'started as a box',
);
$worksheet->insert_shape( 'A1', $stencil, 100, 150 );

$stencil->set_stencil( 0 );
$worksheet->insert_shape( 'A1', $stencil, 200, 150 );
$worksheet->insert_shape( 'A1', $stencil, 300, 150 );

# Ooops!  Changed my mind.  Change the rectangle to an ellipse (circle),
# for the last two shapes.
$stencil->set_type( 'ellipse' );
$stencil->set_text( 'Now its a circle' );


__END__