在Excel单元格上使用Perl和正则表达式来组合任何没有空格的前导数字



使用 Perl 和 Regex 作为 Excel 单元格,我尝试将第一个前导数字与空格组合在一起,并将其他空格单独保留在同一单元格中。 请参阅指定输入和输出的示例。 我的代码没有给我指定的输出。

在Excel中,单元格如下所示:

___________________________
A
___________________________
Apples 2 Green 3 Red
____________________________
Grapefruits 3 Pink 2 Yellow
___________________________
Peaches
___________________________
Grapes
___________________________

指定输出如下:

___________________________
A
___________________________
Apples 2Green 3 Red
____________________________
Grapefruits 3Pink 2 Yellow
___________________________
Peaches
___________________________
Grapes
___________________________

这是我的代码:

#! /usr/bin/perl
use v5.10.0;
use warnings;
use Spreadsheet::ParseExcel;
use Spreadsheet::ParseExcel::SaveParser;
use Spreadsheet::WriteExcel;
my $parser = Spreadsheet::ParseExcel::SaveParser->new();
my $workbook_R = $parser->parse('C:PerlScriptsMuliple_Fruits.xls');
my $workbook_W = Spreadsheet::WriteExcel->new('C:PerlScriptsNew_Multiple_Fruits.xls');
my $worksheet_W = $workbook_W->add_worksheet();
for my $worksheet_R ( $workbook_R->worksheets() ){
my ( $row_min, $row_max ) = $worksheet_R->row_range();
my ( $col_min, $col_max ) = $worksheet_R->col_range(); 
for my $row ( $row_min .. $row_max ) {
for my $col ( $col_min .. $col_max ) {
my $cell = $worksheet_R->get_cell( $row, $col );
#if the cell contains a leading number with a space then combine it
if ($cell->value =~ s/^(S+s+d+)s+/$1/) {
$worksheet_W->write($row, $col,$cell->value())
}
#print the existing cell contents
else {
$worksheet_W->write($row, $col, $cell->value);
} 
}
}
}

$cell->value是一个方法调用,而不是可修改的标量,所以你不能对它使用s///

检查替换是否有任何影响也没有意义:您只想将值写入输出,无论它是否更改

像这样重构你的循环

for my $row ( $row_min .. $row_max ) {
for my $col ( $col_min .. $col_max ) {
my $value = $worksheet_R->get_cell( $row, $col )->value;
$value =~ s/^(S+s+d+)s+/$1/;
$worksheet_W->write($row, $col, $value);
}
}

最新更新