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');
那么上面的代码应该工作。