Как создать хэш хэшей из данных Spreadsheet :: ParseExcel? - PullRequest
3 голосов
/ 28 февраля 2012

Я работаю с модулем Spreadsheet :: ParseExcel .Я хочу создать хэш с данными Excel:

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

Теперь у меня есть что-то вроде этого:

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

Вот мой код:

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();
}

Как мне изменить код, чтобы назначить ключи хеш-значениям хеша из массива @value?

Ответы [ 2 ]

3 голосов
/ 28 февраля 2012
# 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();
  }
}
1 голос
/ 28 февраля 2012

Заменить \@data в последней строке на:

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

Это создаст пару ключ / значение из каждого значения списка, используя соответствующий заголовок в качестве ключа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...