简体   繁体   中英

Open Excel file in perl and print row count

I am using Win32::OLE module to open an excel file and get row count. The problem is when i hard code excel file path it works fine but when i dynamically pass path it throw an error saying that "cant call method workbooks on unblessed reference". Please find the below sample code.

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;

Use backslashes in the filename.

The filename is given to excel and excel won't understand forward slashes. Perl does not convert them because Perl doesn't know the string is a file.

Are you sure that there exists a method named as Open ? Because I don't see it in the documentation of Win32::OLE . Also you must add use Win32::OLE; in your code.

You could use this line of code to change the path into readable path for OLE:

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

outputs:

c:\\users\\mujeeb\\desktop\\excel.xlsx

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM