PerlからExcelVBAのOpenTextの引数を指定するには
たとえば、以下のようなExcelVBAがあったとします。
これをPerlで表現するにはどうしたらよいでしょうか?
ExcelVBA
Workbooks.OpenText Filename:="C:\test_data.txt", _ StartRow:=3, _ DataType:=xlDelimited, _ Space:=True, _ FieldInfo:=Array(Array(1, xlYMDFormat), _ Array(2, xlGeneralFormat), _ Array(3, xlTextFormat), _ Array(4, xlSkipColumn))
Perlでは
use strict; use Win32::OLE; use Win32::OLE::Const 'Microsoft Excel'; Win32::OLE->Option(Warn => 3); my $Excel; my $Book; eval { $Excel = Win32::OLE->GetActiveObject('Excel.Application') || Win32::OLE->new('Excel.Application', 'Quit'); }; if ($@) { die "エラー $@"; } $Book = $Excel->Workbooks->OpenText({Filename => 'C:\test_data.txt', StartRow => 3, DataType => xlDelimited, Space => 1, FieldInfo => [[1, xlYMDFormat], [2, xlGeneralFormat], [3, xlTextFormat], [4, xlSkipColumn]]});
VBAからPerlへのソース変換ポイントは、まず、OpenTextの引数全体を無名ハッシュで受け(『:=』は『=>』で受け)ます。
つぎに、FieldInfoは、配列の配列のハッシュになり、Arrayは無名配列で受け、要素は配列リファレンス、その中のArrayも同じく無名配列で受け、要素はやっとデータ実体です。
尚、xlDelimitedやxlYMDFormat等のベアワードは、『use Win32::OLE::Const 'Microsoft Excel'』でインポートされています。