2015年1月10日土曜日

PerlからWin32::OLE経由でOfficeに引数を渡せず悩む

 PerlからWin32::OLE経由でWordを操作するさい、下図のようなメソッドがある。


これは、ワードの差込印刷において元データを指定するメソッド
OpenDataSourceメソッドにSQLを指定したいのだが、悩んだという話。

問題

$doc->MailMerge->OpenDataSource($database,,,,,,,,,,,,$sql);

ではうまくいかない。

VBAでは

ActiveDocument.MailMerge.OpenDataSource Name:= "T:¥temp.accdb", SQLStatement:="SELECT * FROM `基本データ`"

と記載することができる。

対応

ハッシュで指定し、リファレンスを渡すことで対応可能
my %param;
$param{"Name"} = $database;
$param{"SQLStatement"} = $sql;

$doc->MailMerge->OpenDataSource(¥%param);

所感

perlリファレンスにしっかり書いてあった。
かるーくショック。

SaveAsで激しく悩む

症状

 PerlからWin32::OLE経由でWordを操作し、名前を指定して保存したいのにSaveAsやSaveAs2メソッドで名前をつけて保存ダイアログが表示される。
use Win32::OLE;
my $word = Win32::OLE->new("Word.Application");

$word->Documents->Item(1)->SaveAs2 ($savefile);

原因

アドイン(Word2010IvsAddin:異体字入力用)

対応

アドインをオフにすることで対応

所感

まさかアドインが邪魔をしているとは思わず、、他の端末では正しく実行できたので特定できたので原因にあたりをつけられたのは良かった。