Spreadsheet:: ParseExcel в запросе PERL
Я пишу код PERL, чтобы выбрать значения из определенных строк конкретного листа Excel. Я использую модуль Spreadsheet::ParseExcel для этой цели. Я написал этот код на данный момент
use Spreadsheet::ParseExcel::FmtDefault; use Spreadsheet::ParseExcel; my $parser = Spreadsheet::ParseExcel->new(); #my $name = <STDIN>; die "You must provide a filename to $0 to be parsed as an Excel file" unless @ARGV; my $workbook = $parser->parse($ARGV[0]); my @values; if ( !defined $workbook ) { die $parser->error(), ".\n"; } for my $worksheet ( $workbook->worksheets() ) { my ( $row_min, $row_max ) = $worksheet->row_range(); my ( $col_min, $col_max ) = $worksheet->col_range(); for my $row ( $row_min .. $row_max ) { for my $col ( $col_min .. $col_max ) { my $cell = $worksheet->get_cell( $row, $col ); next unless $cell; $cell->value(); my $cell_type = $cell->{Type}; if ($cell_type =~/Numeric/) { push @values, $cell->unformatted(); } } } }
Я могу выбрать все числовые значения в конкретном листе Excel с этим конкретным кодом, но я хотел бы настроить код так, чтобы он мог подобрать числовые значения в определенных столбцах в соответствии с потребностями пользователей (например: все числовые значения в строке B или строке C). Как мне изменить свой код, чтобы сделать это возможным, или есть более простые модули, в которых можно указать диапазон (например, B2 - B22). Любая помощь приветствуется.
1 ответ
Проверьте с помощью приведенного ниже кода Perl. Значения строки и столбца листа Excel начинаются с (0,0). Поэтому, соответственно, введите номера столбцов и строк соответственно, чтобы получить желаемый результат.
Код:
use strict;
use warnings;
use Spreadsheet::ParseXLSX;
my $parser = Spreadsheet::ParseXLSX->new();
my $workbook = $parser->parse('C:\Users\Perl\test1.xls');
if ( !defined $workbook ) {
die $parser->error(), ".\n";
}
my $worksheet = $workbook->worksheet(0);
my ( $row_min, $row_max ) = $worksheet->row_range();
my ( $col_min, $col_max ) = $worksheet->col_range();
COLUMNS: print "Select the column number required from Excel\n";
my $column = <STDIN>;
chomp($column);
unless ($column =~/[0-9]+/){
print "Bummer!! Please Enter a number\n";
goto COLUMNS;
}
if($column gt $col_max){
print "No such columns defined in the Excel";
goto END;
}
ROWS:print "Select number of rows required from column $column:\n";
my $rows = <STDIN>;
chomp($rows);
my $count = $rows+1;
unless ($rows =~/[0-9]+/){
print "Bummer!! Please Enter a number\n";
goto ROWS;
}
ROW_LABEL: if($rows le $row_max)
{
print "\nThe $count row values from column $column are:\n";
for my $row ( $row_min .. $rows ) {
my $cell = $worksheet->get_cell( $row, $column );
next unless $cell;
my $result = $cell->value();
print $result . "\n";
}
}
else
{
$rows = $row_max;
goto ROW_LABEL ;
}
END: