小池啓仁 ヒロヒト応援ブログ By はてな

小池啓仁(コイケヒロヒト)の動画など。

小池啓仁 ヒロヒト応援ブログ By はてな

PerlでのEXCELブック作成プログラム雛型

以下のサンプルは、Perlのロジックで2次元配列データ作成(行列データ)し、それをEXCELシートのセルへ格納しています。

尚、EXCELの他の機能は、他のVBA系の本を参照のこと。VBAで出来ることは、以下のような感じで、たぶん、ほとんどすべて出来るはずです。

use strict;
use Win32::OLE;

# 指定タイプライブラリのコンスタントが参照可能
use Win32::OLE::Const 'Microsoft Excel';

# エラー時に本処理を中止し、Perlがエラーメッセージを出力し、本プロセスが終了する
Win32::OLE->Option(Warn => 3);

# EXCELブック指定(パスや名前は任意)
my $ExcelFile = 'D:\test_book.xls';

# 2次元配列データ作成(行列データ)
my @data = ( [ qw(00 01 02) ],
             [ qw(10 11 12) ],
             [ qw(20 21 22) ]);

&putData2Excel($ExcelFile, @data);

sub putData2Excel{
my ($FilePath, @AoA) = @_;
my ($excel, $i, $j, $n);

    # EXCEL使用可能かのチェック
    eval {
        Win32::OLE->GetActiveObject('Excel.Application');
    };
    if ($@) {
        die "Excelが入っていません。 $@";
    }
    $excel = Win32::OLE->GetActiveObject('Excel.Application')
    || Win32::OLE->new('Excel.Application', 'Quit');

    my $book = $excel->Workbooks->Add; # ワークシートの作成
    my $sheet = $book->Worksheets(1);

    for $i ( 0 .. $#AoA ) {
        for $j ( 0 .. $#{$AoA[$i]})  {
            $sheet->Cells($i+1, $j+1)->{Value} = $AoA[$i][$j];
        }
    }

    unlink $FilePath;
    $book->SaveAs($FilePath); # ファイルを保存する
    $book->Close();
    $excel->Quit();
}