使用工作表名称读取XLSX文件(它有许多工作表)的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的行)

谢谢你的帮助。

——编辑——

任何人,对这篇文章有任何线索,请发表你的答案或建议。感谢您的回复。

谢谢

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

假设有匹配…如果没有,我想如果没有匹配,我的非高尔夫版本会给你最后一个工作表。

—Edit—

我做了一些假设,你当然需要首先调用方法来加载工作簿:

use strict;
use Spreadsheet::ParseExcel;
my $parser   = Spreadsheet::ParseExcel->new();
my $workbook = $parser->parse('/var/tmp/foo.xls');

最新更新