in reply to Re^4: Converting Excel to Hash
in thread Converting Excel to Hash

See perlintro and perldsc maybe.

The idea is to initialize $data{ $master_key } with an empty array for each id and then to push every found element onto that array:

... $data{$master_key} ||= []; # if we haven't seen $master_key yet, creat +e a fresh array my %this_set; for my $col(1 .. $eSheet->{MaxCol}) { # Some logging for debugging if( !defined $eSheet->{Cells}[$row][$col]) { print "Row $row: skipping empty column $col\n"; next; }; my $key= $eSheet->{Cells}[0][$col]->Value; my $value = $eSheet->{Cells}[$row][$col]->Value; $this_set{$key}=$value; } } # Store our found set for that ID: push @{ $data{ $master_key }}, \%this_set;

Replies are listed 'Best First'.
Re^6: Converting Excel to Hash
by ravi179 (Novice) on Jan 04, 2017 at 09:49 UTC
    use Spreadsheet::ParseExcel; use Data::Dumper; $filename="Book2.xls"; $e=new Spreadsheet::ParseExcel; $eBook=$e->Parse($filename); $sheets = $eBook->{SheetCount}; ($eSheet, $sheetName); foreach $sheet (0 .. $sheets - 1) { $eSheet = $eBook->{Worksheet}[$sheet]; $sheetName = $eSheet->{Name}; print "Worksheet $sheet: $sheetName\n"; %set =(); %data =(); foreach $row( 1 .. $eSheet->{MaxRow} ) { $master_key= ($eSheet->{Cells}[$row][0]->Value); foreach $col(1 .. $eSheet->{MaxCol}) { next unless defined $eSheet->{Cells}[$row][$col]; my $key=$eSheet->{Cells}[0][$col]->Value; my $val=($eSheet->{Cells}[$row][$col]->Value); $set{$key}=$val; } } push @{ $data{$master_key}}, \%set; print Dumper %data; }
    $var1='2'; $var2=[{ clz=>iir, degreee=>b.tech, name=>ravi, } ];

    only last row is coming

    .

      The line push @{ $data{$master_key}}, \%set;
      should be inside the foreach $row ( 1 .. $eSheet->{MaxRow} ) loop.

      If you indent your code sensibly you will see the error more easily.

      poj
        Excel Format: ID Name Degree CLZ 1 Teja ph.d nit ph.d iit 2 Ravi B.tech iir output: $var1 ='1'; $var2=[ { clz=>nit, degree=>ph.d, name=>teja } ] $var1='1' $var2=[ { clz=>iit, degree=>ph.d, name=>teja }, $var2->[0](Why this is coming) ]; $var1='2' $var2=[ { clz=>iir, degree=>b.tech, name=>ravi. }, $var2->[0]; ] ##(What is this additional block) $Var3='2'; $Var4=[ $var2->[0] ];