2014-03-26 74 views
1

我下面的簡化腳本(我不能改變的Win32:OLE)的Perl:保存工作簿中的Win32 :: OLE無法

use warnings; 
use strict; 
use Cwd; 
use Win32::OLE; 
use Win32::OLE::Const 'Microsoft Excel'; 

my $excel = Win32::OLE->new('Excel.Application'); 
my $workbook = $excel->Workbooks->Add; 
my $worksheet = $workbook->Worksheets(1); 
$worksheet->Range("B1")->{Value} ="Hello"; 
$worksheet->Range("C2")->{Value} ="World"; 
# Get current directory using Cwd.pm 

my $saveTo = cwd(); 
$saveTo = $saveTo . '/HelloWorld.xls'; 
print "$saveTo\n"; 
$workbook->SaveAs($saveTo); 
undef $workbook; 

同時會產生以下輸出:

D:/workspace/perl/HW_XLS/HelloWorld.xls 

所以我假設保存路徑是正確的。但它不會創建一個文件。如果我添加$workbook->Close();它至少要求關閉工作簿。但這就是全部。

雖然$workbook->SaveAs("HelloWorld.xls");正在使用正確的內容將我的工作簿保存到「MyDocuments \ HelloWorld.xls」。

如何將此xls寫入我的cwd()目錄,就像寫入我的文檔一樣?

(環境:64位Windows 7,Perl的:(v5.16.1)爲MSWin32-x64的多線程構建)

+0

你試過用$ saveTo中的反斜槓代替斜槓嗎?像$ saveTo =〜s/\ // \\/g;在SaveAs之前。由於這是在Windows上運行,因此可能需要這樣做。 –

+0

這解決了我的問題,你可以發佈它作爲答案?所以我可以接受它。 – MemLeak

回答

2

因爲這在Windows上運行,你需要用反斜槓來替換斜線在$saveTo。添加一條線,如

$saveTo =~ s/\//\\/g; 

在致電$workbook->SaveAs()之前。