我正在使用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是我想要实现的keys.What,如下所示: TY45745a A,B,C,D,E,F和TY5475a G,H,I,J,K,L。
如果文件名在文件末尾有A-E,那么它应该重命名为TY45745a1..6,如果它有G-L TY5475a1..6。
从Excel工作表中提取数据时,是否可以对名称进行后缀分组?
我该怎么做呢?任何建议或指示都将是有帮助的。
发布于 2013-02-22 17:17:29
我假设您的表如下所示:
| B (2) | N (14) |
|:--------:|:-------:|
| TY45745a | A,B |
| TY45745a | C,D |
| TY45745a | E,F |
| TY5475a | G,H |
| TY5475a | I,J |
| TY5475a | K,L |你可以做第一部分
其中TY45745a,TY5475a是我想要实现的keys.What,如下所示: 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;我添加了缺失的部分以使代码运行,并出于演示目的对其进行了一些简化。
https://stackoverflow.com/questions/8297721
复制相似问题