我还在学习Perl,并且正在尝试执行以下任务 - 而且我很沮丧。
目前我有以下内容。
$workbook1
$worksheets1
my $excel = Win32::OLE -> new("Excel.Application");
$excel->{Visible} = 0;
$excel->{DisplayAlerts}=0;
$excel->{SheetsInNewWorkbook} = 1;
my $workbook1 = $excel->Workbooks->Open($OutFileName);
my $worksheet1 = $workbook1->Worksheets(1);
我稍后获取此信息并让Perl在Excel文件的单元格中写入(相应地初始化了必要的$Row
和$Col
)。
$worksheet1->Cells($Row, $Col)->{'Value'} = $var1;
$worksheet1->Cells($Row, $Col+1)->{'Value'} = $var2;
$worksheet1->Cells($Row, $Col+2)->{'Value'} = $var3;
$worksheet1->Cells($Row, $Col+3)->{'Value'} = $var4;
到目前为止这个工作正常。 我打算做的是操作多个工作表而不是一个。
我需要在Excel文件中操作总共5个工作表。
我试图为每个工作表循环后一个进程(我在单元格中写入),但我试图找到一种更简单的方法来回忆$ worksheet1,$ worksheet2,.. 。,$ worksheet5变量。 Cuz,现在没有正确的数组变量 - 我在Perl中学到了如何 - 我需要为每个for循环做一个if语句并编写相应的代码,这是非常无效的..有没有办法使用数组或其他内容为工作表变量执行此操作?
我更熟悉Matlab的工作方式......如果它是带有数组的Matlab脚本,我希望Perl做什么。
for i = 1:num_worksheets
# write in worksheet[i] cell (j,k) with variable var1
end
答案 0 :(得分:0)
我不完全确定我明白你的意思,但我认为你想做的不是重复代码。至少这就是我理解你的Matlab代码的方式。
您可以将所有工作表放入Perl中的一个数组中。
my $worksheet1 = $workbook1->Worksheets(1);
my $worksheet2 = $workbook1->Worksheets(2);
my $worksheet3 = $workbook1->Worksheets(3);
或更短:
my @worksheets (
$workbook1->Worksheets(1),
$workbook1->Worksheets(2),
$workbook1->Worksheets(3),
);
甚至更短:
my @worksheets = map { $workbook1->Worksheets($_) } 1 .. 3;
然后你可以迭代那个数组。 $worksheet
变量都是对象,Perl中的对象是引用。这意味着如果将它们放入数组中,则不会复制对象。
foreach my $sheet ( @worksheets ) {
$sheet->Cells($row, $col)->{'Value'} = $var1;
$sheet->Cells($row, $col + 1)->{'Value'} = $var2;
}
该代码会将$var1
和$var2
写入所有三个工作表1,2和3中的$row
/ $col
单元格。
您甚至不必创建阵列。您可以提供工作簿列表,如果它是您按顺序一起使用所有工作簿的唯一位置。
foreach my $sheet ($worksheet1, $worksheet2, $worksheet3) {
$sheet->Cells($row, $col)->{'Value'} = $var1;
}