Cellsメソッドの第2引数の謎
EXCELオブジェクトでCellsメソッドの第2引数は、普通、列番号を指定します。
しかし、設定に関して、なぜかエラーになったり不思議な動きをするのです。
ネットで調べてもよく分からなかったので、テストをしてみました。
テスト結果
Cellsメソッドの第二引数は、数値指定では列番号で、文字列指定では列名になるのです。
したがって、列番号を文字列で渡すとエラーになるのです。
実はコレ、Perlの常識を超えています。
Perlでは、変数中の数字の値は、数値と文字列の区別がないのです。
したがって、Perl自体が区別つかないものを、Cellsメソッドは内部で判断しているのです。
たとえば、4と'4'を区別して、後者の時はエラーとしているのです。
どうやって、エラーにしているのかは謎です(私にはわかりません)。
テストソース
#!/usr/local/bin/perl use Win32::OLE; my $FilePath = 'D:\test.xls'; # ファイル名 # EXCEL使用可能かチェック eval { Win32::OLE->GetActiveObject('Excel.Application'); }; if ($@) { die "Excelが入っていません。$@"; } #EXCELオブジェクト取得 my $Excel = Win32::OLE->GetActiveObject('Excel.Application') || Win32::OLE->new('Excel.Application', 'Quit'); my $Book = $Excel->Workbooks->Open($FilePath); my $Sheet = $Book->Worksheets(1); $row = 4; # $col = 4; #列番号を数値で渡すと大丈夫 # $col = '4'; #列番号を文字列で渡すとエラーになる $col = 'D'; #文字列でも列名なら大丈夫 my $ColumnCount = $Sheet->Cells($row, $col)->value; print $ColumnCount; $Book->Close; $Excel->Quit();
ちなみに、第1引数(行番号)は、文字列でも数値でも大丈夫です。