http://www.perlmonks.org?node_id=1057479


in reply to Re^11: Iterating Through Cell Blocks with Spreadsheet::Read
in thread Iterating Through Cell Blocks with Spreadsheet::Read

Here's the problem restated another way. Here's a script to read Excel XLSX cell values using Spreadsheet::Read:
#!/usr/bin/perl -w use warnings; use strict; use Spreadsheet::Read; my $name = ""; my $strain = ""; my $initdensity = ""; my $finaldensity = ""; my $avedensity = ""; my $book; my $sheet; my %sheet = (); $book = ReadData ($inbook); my @x = qw(F G H I J K); for my $sheet_index (1 .. $sheet_count) { $sheet = $book->[$sheet_index] or next; foreach (@x) { $name = $sheet{'F28'}; $strain = $sheet{'F29'}; $initdensity = $sheet{'F30'}; $finaldensity = $sheet{'F31'}; $avedensity = $sheet{'F32'}; print "Found sheet with label: $sheet{label}\n"; print "COL=$_ $name $strain $initdensity $finaldensity $avedens +ity\n"; } }
I need to after reading keys F28..F32 read G28..G32 through K28..K32. How can I key it on values from array @x?

Thanks, Hammer

Replies are listed 'Best First'.
Re^13: Iterating Through Cell Blocks with Spreadsheet::Read
by AnomalousMonk (Archbishop) on Oct 09, 2013 at 06:18 UTC

    I'm not at all familiar with Spreadsheet::Read (in fact, I'm not greatly familiar with spreadsheets in general), but the code you show seems close to being workable. Do this:

    • Get rid of the whole
          my %sheet = ();
      statement. In the code you show, it seems to be doing nothing more than confusing the heck out of you.
    • The  foreach (@x) { ... } loop seems OK for looping over the values of the  @x array, with the  $_ default scalar being "topicalized" to each column-name string in turn.
    • Form the cell name as has been discussed and access the cell within the  $sheet hash reference (I'm assuming this is a valid operation) using the  -> arrow operator, e.g.
          $name = $sheet->{"${_}28"};
      or perhaps
          $name = $sheet->{$_ . '28'};
    • Report results. Don't just say "it doesn't work", that's almost useless. Describe your expectations and report how the code fails to meet your expectations. Report exact warning or error messages.
    • Ponder the Basic debugging checklist.

    Good luck.