2016-08-08 119 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; 
} 
相關問題