perl脚本使用工作表名称

时间:2016-11-14 22:45:39

标签: excel perl

我正在尝试编写一个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

如果有任何关于此帖子的潜在客户,请发布您的回答或建议。感谢任何回复。

由于

1 个答案:

答案 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');

然后上面的代码应该可以工作。