2012-02-28 15 views
3

私はSpreadsheet::ParseExcelモジュールを使用しています。Spreadsheet :: ParseExcelデータからハッシュのハッシュを作成するにはどうすればよいですか?

{ 
    'P343453' => { 
     'Date' => 03022011, 
     'Method' => 'No', 
     'Time' => 1440, 
    }, 
    'P343763' => { 
     'Date' => 03022011, 
     'Method' => 'YES', 
     'Time' => '1745', 
    } 
} 

私が今持っていることは、このようなものです::私はExcelデータとハッシュのハッシュを作成したい

my @worksheets = $workbook->worksheets(); 
warn "More than 1 worksheet found\n" if @worksheets > 1; 

# Only work with first page. 
my $worksheet = $worksheets[0]; 

my ($row_min, $row_max) = $worksheet->row_range(); 
my ($col_min, $col_max) = $worksheet->col_range(); 
my @required_col = (1 .. $col_max); 
my @value; 

##to get the headers of the excel file; 
for my $row (0 .. 0) { 
    @value = map { 
     my $cell = $worksheet->get_cell($row, $_); 
     $cell ? $cell->value() : ''; 
    } @required_col; 
} 

# Skip header row 
my $sample_details = {}; 
for my $row (1 .. $row_max) { 
    my @data = map { 
     my $cell = $worksheet->get_cell($row, $_); 
     $cell ? $cell->value() : ''; 
    } @required_col; 
    $sample_details->{$worksheet->get_cell($row,0)->value()} = \@data 
     if defined $worksheet->get_cell($row, 0)->value(); 
} 

どのようにすべきである:ここで

{ 
    'P343453' => [ 
     '03022011', 
     'No', 
     '1440', 
    ], 
    'P343763' => [ 
     '03022011', 
     'YES', 
     '1745', 
    ], 
} 

は私のコードです私は、配列@valueからのハッシュのhashrefにキーを割り当てるコードを変更しますか?

+0

おそらく['Spreadsheet :: ParseExcel'](http://search.cpan.org/perldoc?Spreadsheet::ParseExcel)モジュールを意味しましたか? – TLP

+0

はい。そのSpreadsheet :: ParseExcel。 –

答えて

3
# Skip header row 
my $sample_details = {}; 
for my $row (1 .. $row_max) { 
    my @data = map { 
     my $cell = $worksheet->get_cell($row, $_); 
     $cell ? $cell->value() : ''; 
    } @required_col; 

    foreach my $col (@values) { 
    $sample_details->{$worksheet->get_cell($row,0)->value()}{$col} = shift @data if defined $worksheet->get_cell($row, 0)->value(); 
    } 
} 
+0

ありがとう!私はシフトで試していないダンプされました!お互いに2つのforeachループ!私は夢中になっていた!感謝ペラル –

1

これと最後の行で\@dataを交換:

{ map { ($value[$_] => $data[$_]) } (0..$#value) } 

これをキーとして対応するヘッダーを使用して、各リスト値からキー/値ペアを行います。

関連する問題