Perl tips -- PerlからExcelを扱う

PerlからExcelを扱う

  use Win32::OLE を使うと Perl から Excel を使うことができます。 これは OLE という技巧で別に Excel だけでなく Wordなどでも使用することができます。
#!/usr/bin/perl
use Win32::OLE qw(in with);
use Win32::OLE::Const 'Microsoft Excel';

# エクセルオブジェクトを取得
my $excel = Win32::OLE->GetActiveObject('Excel.Application')
    || die "cannot get active excel!";

# ファイルを開く
#my $book = $excel->Workbooks->Open( $filename );

# ブックを追加する
my $book = $excel->Workbooks->add() ;

#シートを取得する
my $sheet = $book->ActiveSheet;

# モノを書き込む
$sheet->Range("B1")->{Value} = "OLE Sample" ; 

#データを取得する(配列)
my $data = $sheet->Range("B1")->{Value};
print "(" . $data . ")\r\n";

#データを取得する(配列)
my $array = $sheet->Range("A1:C1")->{Value};
print "(" . $$array[0][1] . ")\r\n"; # @@$arrayの2次元配列

#セルの色を指定する(単体)
$sheet->Range("A1")->Interior->{ColorIndex} = 6;

#セルの色を指定する(範囲)
$sheet->Range("A8:G8")->Interior->{ColorIndex} = 6;


#線を引く
#Const xlContinuous = 1;
$sheet->Range("C2")->Borders(xlDiagonalUp)->{LineStyle} = 1;
$sheet->Range("C3")->Borders(xlDiagonalDown)->{LineStyle} = 1;
$sheet->Range("C4")->Borders(xlEdgeLeft)->{LineStyle} = 1;
$sheet->Range("C5")->Borders(xlEdgeRight)->{LineStyle} = 1;
$sheet->Range("C6")->Borders(xlEdgeTop)->{LineStyle} = 1;
$sheet->Range("C7")->Borders(xlEdgeBottom)->{LineStyle} = 1;

#縦列の幅を変える
$sheet->Columns("A:A")->{ColumnWidth} = 4.00;

#折り返しを有効にする
$sheet->Range("A1")->{WrapText} = 1;

#ブックを閉じる
#$book->Close() ;

#エクセルを閉じる
#$excel->quit() ; 

#
  上記のスクリプトの結果は以下のような感じです。
238x321(11675bytes)

Excelのカラーリング

  上記で出てくるColorIndex は以下のところによると、以下のサイトのような感じになります。

http://www.relief.jp/itnote/archives/000482.php

  簡単にこっちでもつくってみました。
289x643(28306bytes)
#!/usr/bin/perl
use Win32::OLE qw(in with);
use Win32::OLE::Const 'Microsoft Excel';

# エクセルオブジェクトを取得
$excel = Win32::OLE->GetActiveObject('Excel.Application')
    || die "cannot get active excel!";
# ブックを追加する
$book = $excel->Workbooks->add() ;

#シートを取得する
$sheet = $book->ActiveSheet;

@work = ("A","B","C","D","E","F","G","H","I","J");
$i = 1;
for ($k = 1 ; $k <= 7 ; $k++ ) {
    for ($j = 0 ; $j < 8 ; $j++) {
        $cell = $work[$j] . $k;
        $sheet->Range($cell)->{Value} = $i;
        $sheet->Range($cell)->Interior->{ColorIndex} = $i;
        $i++;
    }
}
#

マクロの見かた

  PerlでExcelのコマンドで細かい動作を どうやって知るかですが、簡単なのはExcelのマクロを作って それのVB編集スクリプトを眺めてみることです。
  Excelのメニューバーから、ツール→マクロ→ 新しいマクロの記録、と選択してマクロの記録を開始します。
357x521(31640bytes)

  ここでいろいろ操作を行い、 マクロを停止させるとマクロが作成されます。
66x53(1129bytes)

  そのマクロをExcelのメニューバーから ツール→マクロ→マクロ、と選択しVBマクロの編集を選択すれば、 なにをやれば良いかだいたいわかります。