带有来自数组的 perl 循环的多个工作表

Multiple worksheet with perl loop from array

我正在使用 perl 代码创建一个包含多个工作表的电子表格,使用 Spreadsheet::WriteExcel。但是循环只工作一次就中断了。请帮助找出实际发生的事情。

代码

use Spreadsheet::WriteExcel;
my $workbook = new_workbook($r, 'Workbook.xls');
my $worksheet;
my @list = ('bike', 'car', 'bus');
foreach my $name (@list){
 $worksheet = $workbook->add_worksheet($name);
 # writing excel data ...
}
$workbook->close();

您在循环外声明了 $worksheet 变量 (1),然后在每个循环迭代中覆盖它 (2).如果对第一个工作表的引用突然被新工作表替换,这可能会导致 Spreadsheet::WriteExcel 内部出现复杂情况。 XLS 可能只带有最后一张工作表。

use Spreadsheet::WriteExcel;
my $workbook = new_workbook($r, 'Workbook.xls');
my $worksheet; # <--- 1
my @list = ('bike', 'car', 'bus');
foreach my $name (@list){
 $worksheet = $workbook->add_worksheet($name); # <--- 2
 # writing excel data ...
}
$workbook->close();

相反,您应该在使用它的循环中声明一个词法 $worksheet。通常,在 Perl 中总是在最小词法范围内声明变量。

foreach my $name (@list) {
  my $worksheet = $workbook->add_worksheet($name);
  # writing excel data ...
}