=head1 NAME PasteIntoMergedCells.pl - 結合セルへの貼り付け =head1 DESCRIPTION タブ区切りのテキストを結合セルに対してそれっぽく貼り付ける。 ・クリップボードにタブ区切りのテキストをコピー ・貼り付けたいセル&ワークブックをアクティブに した上で呼び出してください。 ※とりあえず効率悪く実装してます。 =cut use strict; use warnings; use Win32::OLE; use Win32::OLE::Const 'Microsoft Excel'; use Win32::Clipboard; # Excel.Application 生成 $Win32::OLE::Warn = 3; # die on errors... my $Excel = Win32::OLE->GetActiveObject('Excel.Application') || Win32::OLE->new('Excel.Application', 'Quit'); # Workbook 取得 my $Book = $Excel->ActiveWorkBook; print $Book->{Name} . "\n"; # アクティブシート、アクティブセルの取得 my $Sheet = $Book->ActiveSheet; my $Active = $Excel->ActiveCell; # クリップボードからデータを取得 my $clip = Win32::Clipboard->Get(); my @lines = split(/\r?\n/, $clip); # クリップボード内の行ごとのループ foreach my $line (@lines) { my @data = split(/\t/, $line); my $First = $Active; # 一番左側のセルを記憶しておく # 横方向に移動しつつセルにデータ貼り付け foreach my $data (@data) { # 値の設定 $Active->{Value} = $data; # 次の列に移動 $Active = $Sheet->Cells( $Active->{Row}, $Active->{Column} + $Active->{MergeArea}->{Columns}->{Count} ); } # 次の行に移動 $Active = $Sheet->Cells( $First->{Row} + $First->{MergeArea}->{Rows}->{Count}, $First->{Column} ); }