1

Win32::OLEを使用して、Perl で Word ドキュメントの作成を自動化する作業を行っています。現在のコードは次のようになり、WINWORD.EXE のインスタンスがメモリに残ります。

my $range = $select->Range;
my $table = $doc->Tables->Add( $range, scalar @rows, scalar @{ $rows[0] } );
for my $rownum ( 0 .. $#rows ) {
    for my $colnum ( 0 .. $#{ $rows[$rownum] } ) {
        my @cellpos = ( $rownum + 1, $colnum + 1 );
        my $data = $rows[$rownum][$colnum];
        $table->Cell(@cellpos)->Range->{'Text'} = $data;
        1;
    }
}

ただし、 Visual Studio .NET に対する Microsoft の推奨に従ってコードをリファクタリングすると、次のようになります。

my $range = $select->Range;
my $tables = $doc->Tables;
my $table = $tables->Add( $range, scalar @rows, scalar @{ $rows[0] } );
for my $rownum ( 0 .. $#rows ) {
    for my $colnum ( 0 .. $#{ $rows[$rownum] } ) {
        my @cellpos = ( $rownum + 1, $colnum + 1 );
        my $data = $rows[$rownum][$colnum];
        my $cell = $table->Cell(@cellpos);
        my $cell_range = $cell->Range;
        $cell_range->{'Text'} = $data;
    }
} 

そのコードは仕事をしますが、私の心にはひどく「うるさい」です。これを行うためのよりクリーンな方法はありますか?

4

1 に答える 1