2

我正在使用 Win32::OLE 模块打开一个 excel 文件并获取行数。问题是当我对 excel 文件路径进行硬编码时,它工作正常,但是当我动态传递路径时,它会抛出一个错误,提示“无法在 unblessed 参考上调用方法工作簿”。请找到以下示例代码。

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

您可以使用这行代码将路径更改为 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 回答
1

你确定存在一个名为的方法Open吗?因为我在Win32::OLE. 此外,您必须添加use Win32::OLE;您的代码。

于 2012-11-15T07:24:38.560 回答