%doc> Example: include('elements/monthly.html', #required 'title' => 'Page title', 'items' => \@items, 'labels' => \@labels, # or \%labels (keys are items) #required? 'colors' => \@colors, # or \%colors, #recommended 'graph_labels' => \@graph_labels, # or \%graph_labels, #optional 'params' => \@params, # opt, 'links' => \@links, # or \%link, #opt 'link_fromparam' => 'param_from', #defaults to 'begin' 'link_toparam' => 'param_to', #defaults to 'end' #optional, pulled from CGI params if not specified 'start_month' => $smonth, 'start_year' => $syear, 'end_month' => $emonth, 'end_year' => $eyear, #optional 'agentnum' => $agentnum, 'nototal' => 1, 'graph_type' => 'LinesPoints', 'remove_empty' => 1, 'bottom_total' => 1, 'sprintf' => '%u', #sprintf format, overrides default %.2f 'disable_money' => 1, ); %doc> % if ( $cgi->param('_type') =~ /^(csv)$/ ) { % % #http_header('Content-Type' => 'text/comma-separated-values' ); #IE chokes % http_header('Content-Type' => 'text/plain' ); % % my $csv = new Text::CSV_XS { 'always_quote' => 1, % 'eol' => "\n", #"\015\012", #"\012" % }; % % $csv->combine(map { my $m=$_; $m =~ s/^(\d+)\//$mon[$1-1] /; $m; } % ('', @{$data->{label}}, $opt{'nototal'} ? () : 'Total') % ); % <% $csv->string %> % % my @bottom_total = (); % foreach ( @{ $data->{'items'} } ) { % % my $col = 0; % my $total = 0; % $csv->combine( % shift( @{ $data->{'item_labels'} } ), % map { $total += $_; $bottom_total[$col++] += $_; sprintf($sprintf, $_); } % ( @{ shift( @{$data->{data}} ) } ), % ( $opt{'nototal'} ? () : sprintf($sprintf, $total) ), % ); % unless ( $opt{'nototal'} ) { % $bottom_total[$col++] += $total; % } % <% $csv->string %> % % } % % if ( $opt{'bottom_total'} ) { % $csv->combine( % 'Total', % map { sprintf($sprintf, $_) } @bottom_total, % ); % <% $csv->string %> % % } % % } elsif ( $cgi->param('_type') =~ /(\.xls)$/ ) { % % #http_header('Content-Type' => 'application/excel' ); #eww % http_header('Content-Type' => 'application/vnd.ms-excel' ); % #http_header('Content-Type' => 'application/msexcel' ); #alas % % my $output = ''; % my $XLS = new IO::Scalar \$output; % my $workbook = Spreadsheet::WriteExcel->new($XLS) % or die "Error opening .xls file: $!"; % % my $worksheet = $workbook->add_worksheet(substr($opt{'title'},0,31)); % % my($r,$c) = (0,0); % % foreach ('', @{$data->{label}}, ($opt{'nototal'} ? () : 'Total') ) { % my $header = $_; % $header =~ s/^(\d+)\//$mon[$1-1] /; % $worksheet->write($r, $c++, $header) % } % % my @bottom_total = (); % foreach ( @{ $data->{'items'} } ) { % $r++; % $c = 0; % my $total = 0; % $worksheet->write( $r, $c++, shift( @{ $data->{'item_labels'} } ) ); % foreach ( @{ shift( @{$data->{data}} ) } ) { % $total += $_; % $bottom_total[$c] += $_; % $worksheet->write($r, $c++, sprintf($sprintf, $_) ); % } % unless ( $opt{'nototal'} ) { % $bottom_total[$c] += $total; % $worksheet->write($r, $c++, sprintf($sprintf, $total) ); % } % } % % $c = 0; % if ( $opt{'bottom_total'} ) { % $r++; % $worksheet->write($r, $c++, 'Total'); % $worksheet->write($r, $c++, sprintf($sprintf, $_)) foreach @bottom_total; % } % % $workbook->close();# or die "Error creating .xls file: $!"; % % http_header('Content-Length' => length($output) ); % <% $output %> % } elsif ( $cgi->param('_type') =~ /^(png)$/ ) { % % #my $chart = Chart::LinesPoints->new(1024,480); % #my $chart = Chart::LinesPoints->new(768,480); % % my $graph_type = 'LinesPoints'; % if ( $opt{'graph_type'} =~ /^(LinesPoints|Mountain)$/ ) { % $graph_type = $1; % } % my $class = "Chart::$graph_type"; % % my $chart = $class->new(976,384); % % my $d = 0; % $chart->set( % #'min_val' => 0, % 'legend' => 'bottom', % 'colors' => { ( % map { my $color = $_; % 'dataset'.$d++ => % [ map hex($_), unpack 'a2a2a2', $color ] % } % #@{ $opt{'colors'} } % @{ $data->{'colors'} } % ), % #'grey_background' => [ 211, 211, 211 ], % 'grey_background' => 'white', % 'background' => [ 0xe8, 0xe8, 0xe8 ], #grey % }, % #'grey_background' => 'false', % 'legend_labels' => $data->{'item_labels'}, % 'brush_size' => 4, % #'pt_size' => 12, % ); % % #my @data = map { $data->{$_} } ( 'label', @items ); % my @data = @{ $data->{data} }; % unshift @data, $data->{'label'}; % % http_header('Content-Type' => 'image/png' ); % % $chart->_set_colors(); % <% $chart->scalar_png(\@data) %> % % } else { % <% include('/elements/header.html', $opt{'title'} ) %> % $cgi->param('_type', 'png');
% unless ( $opt{'disable_download'} ) {
% $cgi->param('_type', "monthly.xls" );
Download full results
as Excel spreadsheet
% $cgi->param('_type', 'csv');
as CSV file