
サンプルグラフ
アクセス解析の専用ソフトなんて高くて買ってもらえないので、Excelでやる夫。
Win32::OLEを使ってVBAをPerlに置き換えていく感じで作っていく。
ちなみにSJISでソース書かないと日本語化けます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | use strict; use warnings; use Win32::OLE; use Win32::OLE::Const 'Microsoft Excel'; use Win32::OLE::NLS qw(:DEFAULT :LANG :SUBLANG); my $excel = Win32::OLE->new('Excel.Application'); $excel->{'Visible'} = 1; my $workbook = $excel->Workbooks->Add(); my $worksheet = $workbook->Worksheets(1); # 列名 $worksheet->Cells(1,1)->{Value} = 'URI'; $worksheet->Cells(1,2)->{Value} = 'PV'; # データをハッシュで作る my %pageview = ( 'index.html' => 100, 'foo.html' => 84, 'bar.html' => 20, 'hoge.html' => 55, 'fuga.html' => 75, ); # 2行目からデータを入れていく my $row = 2; while (my ($uri, $pv) = each %pageview ) { $worksheet->Cells($row,1)->{Value} = $uri; $worksheet->Cells($row,2)->{Value} = $pv; $row++; } # 範囲指定して $worksheet->UsedRange->Select; my $range = $worksheet->Range('B2'); # 降順ソート $excel->Selection->Sort({ Key1 => $range, Order1 => xlDescending, }); # グラフの設定 my $chart = $excel->Charts->Add; $chart->Activate; $chart->{ChartType} = xlBarClustered; $chart->{HasTitle} = 1; $chart->ChartTitle->Font->{Size} = 14; $chart->ChartTitle->{Text} = 'グラフのタイトル'; $chart->{Name} = "シート名"; # 外枠の色 $chart->ChartArea->Interior->{Color} = 0xFFFFFF; # 内側の色 $chart->PlotArea->Interior->{Color} = 0xFFFFFF; # 棒グラフの枠線 $chart->SeriesCollection(1)->Border->{LineStyle} = xlNone; # グラフのラベルを表示する $chart->SeriesCollection(1)->ApplyDataLabels({ ShowValue => 1}); # 横棒のスタイル $chart->Axes(xlValue)->{MajorGridlines}->{Border}->{LineStyle} = xlDot; # 凡例を表示しない $chart->{Legend}->Delete; # X軸を反転(降順で表示されるようにする) $chart->Axes(xlCategory)->{ReversePlotOrder} = 1; # X軸を1つずつ表示 $chart->Axes(xlCategory)->{TickLabelSpacing} = 1; # 保存して終了する場合はコメント外す # $chart->SaveAs('C:/pv.xls'); # $excel->Quit; |
グラフの種類はグラフの種類を設定する(ChartTypeプロパティ)に情報があるので、$chart->{ChartType}に目的にあったグラフを選択するとよいでしょう。
実務ではMySQLからデータ取得してたり、分析資料作るのもかったるいのでWordにグラフ埋め込んだりするのもWin32::OLE経由でやってます。怠惰ですよ怠惰。