Работа с электронной таблицей :: ParseExcel - PullRequest
1 голос
/ 28 ноября 2011

Я работаю с таблицей Excel, чтобы извлечь два столбца и заменить имена файлов на их основе.

Вот так я получаю значения двух интересующих меня столбцов. 14-й столбец может быть одним или несколькими значениями, разделенными запятой.

my @required = (2,14);
my @value;
my @files = grep{ -f && -T && -M > 0 } glob("$dir/*");
my @expected_file = grep{ /Parsed/ } @files;
print "@expected_file\n"; 
if(! $workbook)  {

     die $parser->error(),"\n";
}   


for my $row (1 .. $row_max) {

    @value = map{


        my $cell = $worksheets[0]->get_cell($row,$_);
        $cell ? $cell->value() : '';

    }@required;

  my %hash_value = @value;
  foreach my $key (keys %hash_value ){

      my @suffix = split /[, ]/,$hash_value{$key};

      push @{ $resample->{$key} },@suffix;


      print $key . ":" .@suffix,"\n";
  }   

 }

Вывод будетбыть:

TY45745a:A,BTY45745a:C,DTY45745a:E,FTY5475a:G,HTY5475a:I,JTY5475a:K,L

Где TY45745a, TY5475a являются ключами. Чего я хотел бы достичь, это примерно так: TY45745a A, B, C, D, E, F и TY5475a G, H, I,J, K, L.

И если имена файлов имеют [AE] в конце файла, то его следует переименовать в TY45745a [1..6], а если он имеет [GL] TY5475a [1..6].

Может ли эта группировка суффикса для имени выполняться при извлечении из листа Excel?

Как мне это сделать?Любые предложения или указатели будут полезны.

1 Ответ

1 голос
/ 22 февраля 2013

Я предполагаю, что ваша таблица выглядит следующим образом:

| B (2)    | N (14)  |
|:--------:|:-------:|
| TY45745a | A,B     |
| TY45745a | C,D     |
| TY45745a | E,F     |
| TY5475a  | G,H     |
| TY5475a  | I,J     |
| TY5475a  | K,L     |

Вы можете выполнить первую часть

Где TY45745a, TY5475a - это ключи. Чего я хотел бы достичь, так эточто-то вроде этого: TY45745a A, B, C, D, E, F и TY5475a G, H, I, J, K, L.

со следующим кодом:

use strict;
use warnings;
use Spreadsheet::ParseExcel;
use Data::Dumper;

my $parser = Spreadsheet::ParseExcel->new();
my $book = $parser->Parse('Mappe1.xls') or die $parser->error(),"\n";
my $sheet = $book->{Worksheet};

my %hash;
for my $row (0 .. $sheet->[0]{MaxRow}) {

    my $c2 = $sheet->[0]->get_cell($row, 2-1);
    my $key = $c2 ? $c2->value() : '';

    my $c14 = $sheet->[0]->get_cell($row, 14-1);
    my @values = $c14 ? split(',', $c14->value()) : ();

    push @{$hash{$key}}, @values;
}

print Dumper \%hash;

Я добавил недостающие части для запуска кода и немного упростил его для демонстрационных целей.

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