2017-10-16 57 views
0

我這個掙扎,有紅色的很多文章顯示它應該如何工作來修改Excel中,但我沒有成功:我嘗試使用Perl和Win32 ::奧萊

我的系統是Windows 7與Office 2016安裝並激活。 我想用一個Excel文件作爲模板進行修改並將其保存到一個新的位置。這裏是我的代碼:

sub ExcelWriter { 
    my $Template = "../templates/template.xls"; 
    my $ExcelFile = $MyOutDir."New_Excel_File.xls"; 
    my $Excel = new Win32::OLE('Excel.Application'); 
    if (-f $Template) { 
     my $WorkBook = $Excel->Workbooks->Open($Template); 
     my $WorkSheet = $WorkBook->Worksheets('Overview'); 
     $WorkSheet->Cells(5,3)->{Value} = $Customer; 
     $WorkBook->SaveAs($ExcelFile); 
     $WorkBook->Close(); 
     undef $WorkBook; 
     undef $Excel; 
    } 
} 

我得到「Can't call method "Worksheets" on an undefined value at...」 當我使用「Workbooks->Add」和「Worksheets->Add」創建一個新的工作簿,我可以寫細胞。即使選擇工作表在這裏工作!

對於專家這似乎是顯而易見的,但我必須在這裏錯過了一些東西。我已經將我的工作簿從「.xlsx」保存到「.xls」,並刪除了所有公式等......甚至創建了一個新的空白工作簿!

謝謝您的幫助

問候 洛朗

+0

我想我只是發現了這件事。變量$模板使用「../」,它被用Win32 :: OLE模塊來「......應用程序數據\漫遊\微軟\ Windows的」重定向 –

回答

0

我修改的代碼(使用原始 「的.xlsx」 文件):

sub ExcelWriter { 
    my ($Volume, $Directory, $File) = File::Spec->splitpath(__FILE__); 
    my $Template = $Volume.$Directory.'..\templates\template.xlsx'; 
    my $ExcelFile = $MyOutDir.'New_Excel_File.xlsx'; 
    my $Excel = new Win32::OLE('Excel.Application'); 
    my $WorkBook = $Excel->Workbooks->Open($Template); 
    my $WorkSheet = $WorkBook->Worksheets('Overview'); 
    $WorkSheet->Cells(5,3)->{Value} = $Customer; 
    $WorkBook->SaveAs($ExcelFile); 
    $WorkBook->Close(); 
    undef $WorkBook; 
    undef $Excel; 
} 

...它工作正常!