我正在编写PERL代码,以便从特定excel表的特定行中选择值。为此,我使用电子表格::ParseExcel模块。到目前为止,我已经编写了这段代码
使用电子表格::ParseExcel::FmtDefault;使用电子表格::ParseExcel;我的$parser =电子表格::ParseExcel->new();#my $name =;die“您必须为$0提供一个文件名才能被解析为Excel文件”,除非@ARGV;my $workbook =$解析器->解析($ARGV);my @value;if (定义$workbook ){ die $解析器->error(),".\n";}对于我的$worksheet ( $workbook->worksheets() ){ my ( $row_min,$row_max )= $worksheet->row_range();my ( $col_min,$col_max )= $worksheet->col_range();用于$row ( $row_min )。$row_max ){ for my $col ( $col_min .( $col_max ){ my $cell = $worksheet->get_cell( $row,$col );下一步除非$cell;$cell->value();my $cell_type = $cell->{Type};if ($cell_type =/Numeric/){ push @值,$$col->未格式化();}}}
我能够用这个特定的代码在一个特定的excel表中选择所有的数值,但是我想调整代码,以便它能够根据用户的需要(例如:B行或C行中的所有数值)在特定的列中获取数值。我如何调整我的代码使之成为可能,或者有更简单的模块,可以在其中指定范围(例如B2 - B22)。任何帮助都是非常感谢的。
发布于 2014-11-05 08:44:09
请检查下面的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:https://stackoverflow.com/questions/26750998
复制相似问题