我正在尝试编写一个perl脚本,该脚本使用工作表名称读取excel文件(其中包含许多工作表)。
我知道如何使用工作表编号访问excel文件的特定工作表,但不知道如何使用工作表名称读取它。 我们非常感谢您提供的任何帮助。
以下是我使用工作表编号访问工作表所编写的代码:
my $Sheet_Number = 26;
my $workbook = ReadData("<path to the excel file>");
for (my $i =2; $i<$limit; $i++){
my $cell = "A" . $i;
my $key_1 = $workbook->[$Sheet_Number]{$cell};
}
由于
---- ----编辑
我想使用工作表名称打开Excel文件中的特定工作表。然后从该特定表中读取数据。从命令行参数运行脚本时,用户将输入工作表的名称。
以下是我在获得之前问题的建议答案后使用的代码:
my $parser = Spreadsheet::ParseExcel->new();
my $workbook = $parser->parse("$path");
my $worksheet;
if ($worksheet->get_name() eq "$Sheet_Name"){
for (my $i =2; $i<$limit; $i++){
my $cell = $worksheet->get_cell($i,"A");
my $value = $cell->value();
push @array_keys, $value;
}
}
我想读取特定工作表的A列的值并将其推入数组。
$Sheet_Name : It is the name of the sheet which is entered by the user as cmd line arg.
$path : It is the complete path to the Excel file
错误消息:无法在perl_script.pl上的未定义值上调用方法“get_name”(错误指向使用if-condition
的行。)
感谢您的帮助。
----- ---- EDIT
如果有任何关于此帖子的潜在客户,请发布您的回答或建议。感谢任何回复。
由于
答案 0 :(得分:1)
工作表对象的get_name()
方法与Perl的grep
命令一起应该可以解决这个问题:
my ($worksheet) = grep { $_->get_name() eq 'Sheet2' } $workbook->worksheets();
这将是同样的非高尔夫版本:
my $worksheet;
foreach $worksheet ($workbook->worksheets()) {
last if $worksheet->get_name() eq 'Sheet2';
}
假设有匹配......如果没有,我想如果没有匹配,我的非高尔夫版本会给你最后一张工作表。
- 编辑 -
我做了假设 - 你当然需要先调用方法来加载工作簿:
use strict;
use Spreadsheet::ParseExcel;
my $parser = Spreadsheet::ParseExcel->new();
my $workbook = $parser->parse('/var/tmp/foo.xls');
然后上面的代码应该可以工作。