/ / PerlのWin32 :: OLEがExcelワークシートの「無効なインデックス」について文句を言うのはなぜですか? - windows、perl、excel

PerlのWin32 :: OLEがExcelワークシートの「無効なインデックス」について文句を言うのはなぜですか? - windows、perl、excel

コード

# get already active Excel application or open new
my $Excel = Win32::OLE->GetActiveObject("Excel.Application")
|| Win32::OLE->new("Excel.Application", "Quit");

# open Excel file
my $Book = $Excel->WorkBooks->Open($file);

# select worksheet number. Default is 1 (you can also select a worksheet by name)
print "worksheet $worksheetn";
my $Sheet = $Book->Worksheets($worksheet);

どこで $worksheet ハッシュからの値として得られる整数である。

Error -
Win32::OLE(0.1709) error 0x8002000b: "Invalid index"
in METHOD/PROPERTYGET "Worksheets" at win32excel.pl

私が間違っていることを示唆していますか?

回答:

回答№1は2

はい、 $worksheet Microsoftのアプリケーションインターフェイス言語はVBであるため、最初のインデックスは Worksheets - 多くのMSコレクションでは - 1です。

だからあなたは正気の範囲をテストすることができます。

if ( $worksheet > 0 and $worksheet <= $xl->Worksheets->{Count} ) {
...
}

Jmzの考えはおそらく問題を乗り越える悪い方法ではありません。

use Win32::OLE qw<in>;

my @sheets = in $book->worksheets;
my $first_sheet = $sheets[0]; # or shift @sheets.

したがって、認知の不調和をVB-ishからPerlに還元する。


回答№2の場合は1

アクセスする前に利用可能なシートを決定する:

use Win32::OLE qw(in);
my @sheets = in $Book->Worksheets;