1package Spreadsheet::WriteExcel::Chart::Pie; 2 3############################################################################### 4# 5# Pie - A writer class for Excel Pie charts. 6# 7# Used in conjunction with Spreadsheet::WriteExcel::Chart. 8# 9# See formatting note in Spreadsheet::WriteExcel::Chart. 10# 11# Copyright 2000-2010, John McNamara, jmcnamara@cpan.org 12# 13# Documentation after __END__ 14# 15 16require Exporter; 17 18use strict; 19use Spreadsheet::WriteExcel::Chart; 20 21 22use vars qw($VERSION @ISA); 23@ISA = qw(Spreadsheet::WriteExcel::Chart Exporter); 24 25$VERSION = '2.40'; 26 27############################################################################### 28# 29# new() 30# 31# 32sub new { 33 34 my $class = shift; 35 my $self = Spreadsheet::WriteExcel::Chart->new( @_ ); 36 37 $self->{_vary_data_color} = 1; 38 39 bless $self, $class; 40 return $self; 41} 42 43 44############################################################################### 45# 46# _store_chart_type() 47# 48# Implementation of the abstract method from the specific chart class. 49# 50# Write the Pie chart BIFF record. 51# 52sub _store_chart_type { 53 54 my $self = shift; 55 56 my $record = 0x1019; # Record identifier. 57 my $length = 0x0006; # Number of bytes to follow. 58 my $angle = 0x0000; # Angle. 59 my $donut = 0x0000; # Donut hole size. 60 my $grbit = 0x0002; # Option flags. 61 62 my $header = pack 'vv', $record, $length; 63 my $data = ''; 64 $data .= pack 'v', $angle; 65 $data .= pack 'v', $donut; 66 $data .= pack 'v', $grbit; 67 68 $self->_append( $header, $data ); 69} 70 71 72############################################################################### 73# 74# _store_axisparent_stream(). Overridden. 75# 76# Write the AXISPARENT chart substream. 77# 78# A Pie chart has no X or Y axis so we override this method to remove them. 79# 80sub _store_axisparent_stream { 81 82 my $self = shift; 83 84 $self->_store_axisparent( @{ $self->{_config}->{_axisparent} } ); 85 86 $self->_store_begin(); 87 $self->_store_pos( @{ $self->{_config}->{_axisparent_pos} } ); 88 89 $self->_store_chartformat_stream(); 90 $self->_store_end(); 91} 92 93 941; 95 96 97__END__ 98 99 100=head1 NAME 101 102Pie - A writer class for Excel Pie charts. 103 104=head1 SYNOPSIS 105 106To create a simple Excel file with a Pie chart using Spreadsheet::WriteExcel: 107 108 #!/usr/bin/perl -w 109 110 use strict; 111 use Spreadsheet::WriteExcel; 112 113 my $workbook = Spreadsheet::WriteExcel->new( 'chart.xls' ); 114 my $worksheet = $workbook->add_worksheet(); 115 116 my $chart = $workbook->add_chart( type => 'pie' ); 117 118 # Configure the chart. 119 $chart->add_series( 120 categories => '=Sheet1!$A$2:$A$7', 121 values => '=Sheet1!$B$2:$B$7', 122 ); 123 124 # Add the worksheet data the chart refers to. 125 my $data = [ 126 [ 'Category', 2, 3, 4, 5, 6, 7 ], 127 [ 'Value', 1, 4, 5, 2, 1, 5 ], 128 ]; 129 130 $worksheet->write( 'A1', $data ); 131 132 __END__ 133 134=head1 DESCRIPTION 135 136This module implements Pie charts for L<Spreadsheet::WriteExcel>. The chart object is created via the Workbook C<add_chart()> method: 137 138 my $chart = $workbook->add_chart( type => 'pie' ); 139 140Once the object is created it can be configured via the following methods that are common to all chart classes: 141 142 $chart->add_series(); 143 $chart->set_title(); 144 145These methods are explained in detail in L<Spreadsheet::WriteExcel::Chart>. Class specific methods or settings, if any, are explained below. 146 147=head1 Pie Chart Methods 148 149There aren't currently any pie chart specific methods. See the TODO section of L<Spreadsheet::WriteExcel::Chart>. 150 151A Pie chart doesn't have an X or Y axis so the following common chart methods are ignored. 152 153 $chart->set_x_axis(); 154 $chart->set_y_axis(); 155 156=head1 EXAMPLE 157 158Here is a complete example that demonstrates most of the available features when creating a chart. 159 160 #!/usr/bin/perl -w 161 162 use strict; 163 use Spreadsheet::WriteExcel; 164 165 my $workbook = Spreadsheet::WriteExcel->new( 'chart_pie.xls' ); 166 my $worksheet = $workbook->add_worksheet(); 167 my $bold = $workbook->add_format( bold => 1 ); 168 169 # Add the worksheet data that the charts will refer to. 170 my $headings = [ 'Category', 'Values' ]; 171 my $data = [ 172 [ 'Apple', 'Cherry', 'Pecan' ], 173 [ 60, 30, 10 ], 174 ]; 175 176 $worksheet->write( 'A1', $headings, $bold ); 177 $worksheet->write( 'A2', $data ); 178 179 # Create a new chart object. In this case an embedded chart. 180 my $chart = $workbook->add_chart( type => 'pie', embedded => 1 ); 181 182 # Configure the series. 183 $chart->add_series( 184 name => 'Pie sales data', 185 categories => '=Sheet1!$A$2:$A$4', 186 values => '=Sheet1!$B$2:$B$4', 187 ); 188 189 # Add a title. 190 $chart->set_title( name => 'Popular Pie Types' ); 191 192 193 # Insert the chart into the worksheet (with an offset). 194 $worksheet->insert_chart( 'C2', $chart, 25, 10 ); 195 196 __END__ 197 198 199=begin html 200 201<p>This will produce a chart that looks like this:</p> 202 203<p><center><img src="http://homepage.eircom.net/~jmcnamara/perl/images/pie1.jpg" width="527" height="320" alt="Chart example." /></center></p> 204 205=end html 206 207 208=head1 AUTHOR 209 210John McNamara jmcnamara@cpan.org 211 212=head1 COPYRIGHT 213 214Copyright MM-MMX, John McNamara. 215 216All Rights Reserved. This module is free software. It may be used, redistributed and/or modified under the same terms as Perl itself. 217 218