Hi, I am trying to read only the first worksheet of a large excel (2007) file (=xlsx) which has multiple worksheets. Based on pointers in the web, I am trying to use the cell_handler. But I don't think it is working. Perl is ignoring the cell_handler & parsing all sheets (& giving out-of-memory error). I am using Spreadsheets::ParseXLSX version 0.16 with Perl 5.10.
Any pointers welcome!
Thank you.
use Spreadsheet::ParseXLSX ;
use strict;
my $parser = Spreadsheet::ParseXLSX->new(
CellHandle => \&cell_handler,
NotSetCell => 1,
);
print "Before Parser...\n" ;
my $workbook = $parser->parse('/path/to/my/xlsx') ;
print "After Parser...\n" ;
if ( !defined $workbook ) {
print "Error parsing file... \n" ;
die $parser->error(), ".\n";
}
my $worksheet = $workbook->worksheet('my_first_sheet');
print $worksheet->{Name} . "\n" ;
my ( $row_min, $row_max ) = $worksheet->row_range();
my ( $col_min, $col_max ) = $worksheet->col_range();
for my $row ( $row_min .. $row_max ) {
for my $col ( $col_min .. $col_max ) {
my $cell = $worksheet->get_cell( $row, $col );
next unless $cell;
print "Row, Col = ($row, $col)\n";
print "Value = ", $cell->value(),
+"\n";
}
}
sub cell_handler {
my $workbook = $_[0];
my $sheet_index = $_[1];
my $row = $_[2];
my $col = $_[3];
my $cell = $_[4];
# Skip unwanted worksheets
if ( $sheet_index > 0 ) {
$workbook->ParseAbort(1);
print "sheet_index > 0... aborting extraction! \n" ;
return;
}
print "Inside cell_handler...\n" ;
}