a.alandkar has asked for the wisdom of the Perl Monks concerning the following question:

Hello all, I am using strawberry perl. Facing some issues.

#! usr/bin/perl -w #use,strict; use Spreadsheet::WriteExcel; use Spreadsheet::ParseExcel; my $workbook; my @labels = ('Parameter_Name','Parameter_Index','Storage_Class','Data +_Type','min_range_value','max_range_value','default_value','test_valu +e','mode_for_write','access_rights','view1','view2','view3','view4'); $workbook = Spreadsheet::WriteExcel->new('perl.xls'); $worksheet = $workbook->add_worksheet(); for($for=0;$for<13;$for++) { $worksheet->write(0,$for,$labels[$for]); # print($for); # print($labels[$for]); } &get_max_row_col(); sub get_max_row_col() { my $parser = Spreadsheet::ParseExcel->new(); my $workbook1 = $parser->parse('perl.xls'); for my $worksheet ( $workbook1->worksheet(0) ) { my ( $row_min, $row_max ) = $worksheet->row_range(); # + Find out the worksheet ranges my ( $col_min, $col_max ) = $worksheet->col_range(); print ("max_rows = $row_max \n"); print ("max_cols = $col_max \n"); } }

when i compile this code it gives me an error saying (C:\Users\Ambar.Alandkar\Desktop\Ambar\Perl-Test>perl XL_Handling.pl Can't call method "worksheet" on an undefined value at XL_Handling.pl line 29.) but when i run the get_max_row_col() subroutine code making a separate file it works well without any error. Is there anything missing or wrong in implementation.? Please help.

Replies are listed 'Best First'.
Re: Error while reading .xls file
by AppleFritter (Vicar) on Aug 28, 2014 at 11:33 UTC

    You're not closing your Excel file after writing to it. Add an explicit $workbook->close() before calling get_max_row_col(), and your script will work.

    While I'm at it, allow me to suggest doing proper error checking, too. Quoting Spreadsheet::ParseExcel's documentation (emphasis mine):

    If an error occurs parse() returns undef. In general, programs should contain a test for failed parsing as follows:

    my $parser = Spreadsheet::ParseExcel->new(); my $workbook = $parser->parse('Book1.xls'); if ( !defined $workbook ) { die $parser->error(), ".\n"; }

    Adding error checking to your code then yields:

    No Excel data found in file at 1098852.pl line 32.

    Which might already have given you a clue as to what's going wrong.

      Thank you mate. It works. :)
        You're welcome! *tips hat*