从数组中使用perl循环的多个工作表

时间:2015-08-13 10:20:33

标签: excel perl spreadsheet

我正在使用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();

1 个答案:

答案 0 :(得分:3)

您在循环之外声明$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 ...
}