Perl 使用电子表格::ParseExcel

Perl 使用电子表格::ParseExcel,perl,Perl,我正在使用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";

我正在使用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

如果文件名在文件末尾有[A-E],则应将其重命名为TY45745a[1..6],如果文件名有[G-L]TY5475a[1..6]

从Excel工作表中提取时,是否可以对名称的后缀进行分组


我该怎么做?任何建议或建议都会很有帮助

我假设您的表格如下所示:

| 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;
我添加了缺少的部分来运行代码,并将其简化了一点
位用于演示目的

我假设您的表格如下所示:

| 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;
我添加了缺少的部分来运行代码,并将其简化了一点
位用于演示目的

这个问题实际上与电子表格::ParseExcel没有任何关系。似乎您只需要将从单元格中读取的数据从一种格式转换为另一种格式。如果您只是根据您试图实现的翻译来陈述问题,并省略所有Excel代码,可能会更好。该问题实际上与电子表格::ParseExcel无关。似乎您只需要将从单元格中读取的数据从一种格式转换为另一种格式。如果您只是根据您试图实现的翻译来陈述问题,并省略所有Excel代码,可能会更好。