【问题标题】:perl script to read an xlsx file(which has many sheets) using the sheet name使用工作表名称读取 xlsx 文件(有许多工作表)的 perl 脚本
【发布时间】:2017-03-28 16:51:14
【问题描述】:

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

感谢您的帮助。

-----编辑----

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

谢谢

【问题讨论】:

  • use Spreadsheet::ParseExcel; CPAN module。我的第一份工作是将 Perl 脚本转换为 Powershell。如果您想探索 PS,这里有一个 [很棒的模块(blogs.technet.microsoft.com/heyscriptingguy/2015/11/25/…) 可用
  • 感谢您的回复。我正在使用 CPAN 模块:使用 Spreadsheet::ParseExcel;将查看提到的博客。但是有没有办法让 perl 脚本(使用 CPAN 模块)使用工作表名称打开工作表。
  • Spreadsheet::ParseExcel 仅适用于 xls 文件,对 xlsx 文件使用 Spreadsheet::ParseXLSX

标签: excel perl


【解决方案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');

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

【讨论】:

  • 您好,感谢您的回复。/
  • 您好,感谢您的回复。我正在尝试使用此代码:我的 $worksheet; foreach $worksheet ($workbook->worksheets()) { if ($worksheet->get_name() eq "$Sheet_Name"){ for (my $i =2; $iget_cell($i,"A");我的 $value = $cell->value();推@array_keys,$值;我收到如下错误消息:不能在 perl_script.pl 第 70 行的 unblessed 参考上调用方法“工作表”。任何线索。谢谢
  • 我编辑了我的问题,请您再查看一下。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-22
  • 1970-01-01
  • 2018-12-16
相关资源
最近更新 更多