Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl-Sensitive Sunglasses
 
PerlMonks  

Iterating Through Cell Blocks with Spreadsheet::Read

by Hammer2001 (Novice)
on Oct 08, 2013 at 17:20 UTC ( #1057442=perlquestion: print w/ replies, xml ) Need Help??
Hammer2001 has asked for the wisdom of the Perl Monks concerning the following question:

I have been stuck on this problem for weeks now. I am reading a XLSX workbook and need to read F28 to F32 through K28 to K32 into variables, and I have not been able to figure out how to write a routine to do this.

I have:

$book = ReadData ($inbook); my @x = qw(F G H I J K); for my $sheet_index (1 .. $sheet_count) { my $sheet = $book->[$sheet_index] or next; foreach (@x) { $name = $sheet{"$_28"}; $strain = $sheet{"$_29"}; $initdensity = $sheet{"$_30"}; $finaldensity = $sheet{"$_31"}; $avedensity = $sheet{"$_32"}; print "Found sheet with label: $sheet{label}\n"; print "COL=$_ $name $strain $initdensity $finaldensity $avedens +ity\n"; } }

If hard code the reference as $sheet{"F28"} for instance, it works. Iterating through row numbers, however, does not.

Can anyone provide guidance on how?

Thanks,

Hammer.

Comment on Iterating Through Cell Blocks with Spreadsheet::Read
Download Code
Replies are listed 'Best First'.
Re: Iterating Through Cell Blocks with Spreadsheet::Read
by toolic (Bishop) on Oct 08, 2013 at 17:30 UTC

    Tip #1 from the Basic debugging checklist: use strict and warnings. You get plenty of helpful information when you do. Perl thinks you have a variable named $_28. However, you really want to concatenate the string in $_ with the string 28. Here is one way to fix your problem:

    $name = $sheet{"${_}28"};
      Thanks you for your reply, toolic. I still get the same error "Use of uninitialized value in concatenation (.) or string at..." on the print statement after replacing lines like "$name = $sheet{"$_28"}" with "$name = $sheet{"${_}28"}". Any other thoughts? Regards, Hammer.
        I hate to post this because it sounds condescending -- I don't mean it that way, honest!

        You know you have to do this with all the lines where you have such a hash key (e.g. the ones with "_29", "_30", etc), right? Not just the _28 one.

        I've been trying to get toolic's suggestion to not work, here, and I haven't succeeded.

Re: Iterating Through Cell Blocks with Spreadsheet::Read
by kcott (Abbot) on Oct 09, 2013 at 08:13 UTC

    G'day Hammer2001

    I thought this looked familiar.

    "I have been stuck on this problem for weeks now."

    When you asked about this some weeks ago, in Spreadsheet::XLSX Cell Access, you were shown different ways to fix code like "$_NN". You acknowledged the information and said thankyou; however, you appear to have ignored the advice.

    Perhaps revisiting that thread might be a good start. :-)

    -- Ken

      Anomolous, thank you for the guidance. Referencing the hash using statements like '$name = $sheet->{"${_}28"}' did the trick! Gratefully, Hammer.

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://1057442]
Approved by toolic
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others exploiting the Monastery: (6)
As of 2015-07-08 04:35 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (94 votes), past polls