2014-02-10 74 views
1

我正在使用PERL腳本通過OLE在現有的Excel文件上創建工作簿。 我想添加一個新的工作簿該指令 -無法使用PERL腳本打開工作簿

$Book = $Excel->Workbooks->Add(); 

,然後用它執行某些操作。 但是,在執行此代碼時,我遇到了$ Book始終等於零的情況,並且之後excel變得沒有響應。 我包括下面的代碼片段:

use File::Spec; 
use Win32::OLE; 
use File::Basename; 
use Cwd 'abs_path'; 
use Win32::OLE::Const 'Microsoft Excel'; 
use Win32::OLE qw(in with); 
use Win32::OLE::Variant; 
use Win32::OLE::NLS qw(:LOCALE :DATE); 
use constant false => 0; 
use constant true => 1; 
use constant NULL => 0; 


my $Excel   = ""; 
my $Book   = 0; 
my $Sheet_1   = ""; 
my $excelfile  = " "; 

print "execl"; 
my $RC = false; 
$Excel = Win32::OLE->GetActiveObject('Excel.Application') || Win32::OLE->new('Excel.Application', 'Quit'); 
$Excel->{DisplayAlerts}=1; 
$Excel->{Visible} =1; 

    $excelfile=E:\script\workbook.xlsx; 
    $Book = $Excel->Workbooks->Add(); 
    print "\n".$excelfile."\n"; 

    if ($Book==0) 
    {print "close any open Excel file\n If problem persist close Excel application from task manager"; 
    #return $RC; 
    $Excel->Close(); 
    } 

    $Sheet_1 = $Book->Worksheets(1); 
    $Sheet_1->Activate();  
    $Sheet_1->{Name} = "testing_sheet"; 

任何指針什麼我做錯了嗎?

免責聲明:我在這個總的小白:P

回答

0

這裏是一個很好的教程:http://www.perlmonks.org/?node_id=153486

你可以嘗試一些調試這些:

use strict; 
use warnings; 
$Win32::OLE::Warn = 3; # Die on Errors. 

my $Excel = Win32::OLE->GetActiveObject('Excel.Application') || Win32::OLE->new('Excel.Application', 'Quit'); 
$Excel->{DisplayAlerts}=1; 
$Excel->{Visible} =1; 

    my $excelfile=E:\script\workbook.xlsx; 
    print "Creating new workbook\n"; 
    my $Book = $Excel->Workbooks->Add(); 
    print "Saving to excelfile: $excelfile\n"; 
    $Book->SaveAs($excelfile); 


    if (! defined $Book){ 
    print "close any open Excel file\n If problem persist close Excel application from task manager";  
    $Excel->Close(); 
    return $RC; 
    } 
+0

感謝您的回覆。我試過調試代碼,看起來在保存文件時存在一些問題。我得到一個Win32 :: OLE錯誤代碼0x80010105:「服務器拋出一個異常」在METHOD/PROPERTYGET「SaveAs」 你知道爲什麼會發生這種情況嗎? 我在幾個不同的系統上嘗試過相同的代碼。它似乎在某些機器上工作,但不在其他機器上。 – Rishi

+0

因此,代碼正在工作,但您在某些機器中遇到問題。你有沒有試過使用本地目錄(%TEMP%)? – user1126070

0

也許你錯過了報價分數?

$excelfile='E:\script\workbook.xlsx'; 
+0

這是發佈該問題時的錯字。在代碼中它工作正常。 – Rishi

相關問題