#!/usr/bin/perl -w
################################################################################
#
# Demonstrates Excel::Writer::XLSX's named colors and the Excel color
# palette.
#
# The set_custom_color() Worksheet method can be used to override one of the
# built-in palette values with a more suitable colour. See the main docs.
#
# reverse('©'), March 2002, John McNamara, jmcnamara@cpan.org
#
use strict;
my $workbook = Excel::Writer::XLSX->new( 'colors.xlsx' );
# Some common formats
my $center = $workbook->add_format( align => 'center' );
my $heading = $workbook->add_format( align => 'center', bold => 1 );
######################################################################
#
# Demonstrate the named colors.
#
my %colors = (
0x08, 'black',
0x0C, 'blue',
0x10, 'brown',
0x0F, 'cyan',
0x17, 'gray',
0x11, 'green',
0x0B, 'lime',
0x0E, 'magenta',
0x12, 'navy',
0x35, 'orange',
0x21, 'pink',
0x14, 'purple',
0x0A, 'red',
0x16, 'silver',
0x09, 'white',
0x0D, 'yellow',
);
my $worksheet1 = $workbook->add_worksheet( 'Named colors' );
$worksheet1->set_column( 0, 3, 15 );
$worksheet1->write( 0, 0, "Index", $heading );
$worksheet1->write( 0, 1, "Index", $heading );
$worksheet1->write( 0, 2, "Name", $heading );
$worksheet1->write( 0, 3, "Color", $heading );
my $i = 1;
while ( my ( $index, $color ) = each %colors ) {
my $format = $workbook->add_format(
fg_color => $color,
pattern => 1,
border => 1
);
$worksheet1->write( $i + 1, 0, $index, $center );
$worksheet1->write( $i + 1, 1, sprintf( "0x%02X", $index ), $center );
$worksheet1->write( $i + 1, 2, $color, $center );
$worksheet1->write( $i + 1, 3, '', $format );
$i++;
}
######################################################################
#
# Demonstrate the standard Excel colors in the range 8..63.
#
my $worksheet2 = $workbook->add_worksheet( 'Standard colors' );
$worksheet2->set_column( 0, 3, 15 );
$worksheet2->write( 0, 0, "Index", $heading );
$worksheet2->write( 0, 1, "Index", $heading );
$worksheet2->write( 0, 2, "Color", $heading );
$worksheet2->write( 0, 3, "Name", $heading );
for my $i ( 8 .. 63 ) {
my $format = $workbook->add_format(
fg_color => $i,
pattern => 1,
border => 1
);
$worksheet2->write( ( $i - 7 ), 0, $i, $center );
$worksheet2->write( ( $i - 7 ), 1, sprintf( "0x%02X", $i ), $center );
$worksheet2->write( ( $i - 7 ), 2, '', $format );
# Add the color names
if ( exists $colors{$i} ) {
$worksheet2->write( ( $i - 7 ), 3, $colors{$i}, $center );
}
}
__END__