2

Win32 :: OLEモジュールを使用して、Excelファイルを開き、行数を取得しています。問題は、Excelファイルパスをハードコーディングすると正常に機能するが、パスを動的に渡すと、「祝福されていない参照でメソッドワークブックを呼び出すことができない」というエラーがスローされることです。以下のサンプルコードを見つけてください。

use OLE;
use Win32::OLE::Const 'Microsoft Excel';

my $xapp= Win32::OLE->GetActiveObject('Excel.Application')
            or do { Win32::OLE->new('Excel.Application', 'Quit')};
    $xapp->{'Visible'} = 0;
    my $file='excel.xlsx';
    my $fileName="c:/users/mujeeb/desktop/".$file;
    print $fileName;
    my $wkb = $xapp->Workbooks->Open($fileName); //here i am getting error coz i am passing dynamic fileName;
    my $wks = $wkb->Worksheets('Sheet1');
    my $Tot_Rows=$wks->UsedRange->Rows->{'Count'}; 
    print $Tot_Rows."\n";
    $xapp->close;
4

3 に答える 3

3

ファイル名には円記号を使用してください。

ファイル名はExcelに付けられており、Excelはスラッシュを理解しません。文字列がファイルであることをPerlが知らないため、Perlはそれらを変換しません。

于 2012-11-15T11:41:12.813 に答える
1

という名前のメソッドが存在することを確認しますOpenか?のドキュメントに表示されていないためですWin32::OLE。また、コードを追加する必要がありuse Win32::OLE;ます。

于 2012-11-15T07:24:38.560 に答える
1

このコード行を使用して、パスをOLEの読み取り可能なパスに変更できます。

my $file='excel.xlsx';
my $fileName="c:/users/mujeeb/desktop/".$file;
$fileName=~s/[\/]/\\/g;
print $fileName;

出力:

c:\\users\\mujeeb\\desktop\\excel.xlsx
于 2013-11-11T12:16:38.440 に答える