perl脚本使用工作表名称读取一个xlsx文件(它有许多工作表)

我正在尝试编写一个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文件中的特定工作表。 然后从特定的表单中读取数据。 工作表的名称将由用户在从命令行参数运行脚本时input。

下面是我得到了我先前的问题的build议答案后使用的代码:

 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的行)。

谢谢您的帮助。

– – -编辑 – –

任何人,在这个职位任何线索,请张贴您的答案或build议。 感谢任何回应。

谢谢

工作表对象的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'); 

那么上面的代码应该工作。