2016-08-08 125 views
-1

我仍在学习Perl,并且正在尝试执行以下任务 - 并且很悲惨地卡住了。Perl如何在Excel文件中操作多个工作表?

目前我有以下。

  1. 打开必要的Excel文件
  2. 存储工作簿的下VAR信息$workbook1
  3. 商店工作表下的VAR $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文件的单元格中(必要的相应地初始化和$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; 

到目前为止,这工作正常。 我打算做的是在多个工作表上操作,而不是一个。

  1. 打开必要的Excel文件
  2. 下变量$ workbook1
  3. 商店Wortsheets下VAR(S)$ worksheets1,$ worksheets2,$ worksheets3,$ worksheets4,$ worksheets5信息(或存储
  4. 存储工作簿的信息如果可能,它变成一个数组?)

我总共有5个工作表,我需要在Excel文件中进行操作。我试图为每个工作表循环后面的过程(在单元格中写),但我试图找到一个更简单的方法来调用$ worksheet1,$ worksheet2,...,$ worksheet5变量。 Cuz,现在没有适当的数组变量 - 我还没有学会如何在Perl中 - 我需要为每个循环做一个if语句并编写相应的代码,这是非常无效的。有没有办法用数组或其他工作表变量执行此操作?

我更熟悉Matlab是如何工作的......这里是我想让Perl做的事情,如果它是一个带有数组的Matlab脚本。

for i = 1:num_worksheets 
# write in worksheet[i] cell (j,k) with variable var1 
end 
+1

这个问题只是“*如何在Perl中使用数组?”? – melpomene

+0

使用数组我知道了,但是在使用excel命令实现它时会发生奇怪的错误。我想知道是否有一个不同的方式来使用该数组与excel命令如何工作 –

+0

你的代码是什么?什么是错误? – melpomene

回答

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; 
} 

该代码将在所有三个工作表1,2和3

你甚至不必创建一个数组写$var1$var2$row/$col细胞。您可以提供工作簿列表,如果这是您按照该顺序将所有这些工作簿一起使用的唯一位置。

foreach my $sheet ($worksheet1, $worksheet2, $worksheet3) { 
    $sheet->Cells($row, $col)->{'Value'}  = $var1; 
} 
相关问题