2013-03-31 44 views
3

朋友們,我寫了一個Perl腳本,使用Spreadsheet::WriteExcel將一組CSV文件轉換爲電子表格 格式。經過一番研究,我得出了 的結論,即沒有選擇將列寬固定爲Auto-fit選項。如何使用OLE模塊處理excel?

所以我在做什麼是我已經打開使用Win32::OLE 模塊,XLS文件相同的腳本,而這樣做我得到一個錯誤信息

Can't use an undefined value as a HASH reference 

相應的代碼是:

# spread sheet creation 
my $workbook = Spreadsheet::WriteExcel->new($file_name); 
# ... 
my $worksheet = $workbook->add_worksheet($work_sheet_name); 
# ... 
$worksheet->write($rowNum, $j,$_,$default_format); 

這些步驟我都在同一個腳本一些行之後:

my $Excel = Win32::OLE->GetActiveObject('Excel.Application') 
    || Win32::OLE->new('Excel.Application'); 
$Excel->{'Visible'} = 0; #0 is hidden, 1 is visible 
$Excel->{DisplayAlerts}=1; #0 is hide alerts 

# Open File and Worksheet 
my $return_file_name="C:\\Users\\admin\\Desktop\\Report_Gen\\$file_name"; 
print ">>$return_file_name<<"; 
my $Book = $Excel->Workbooks->Open($return_file_name); # open Excel file 
foreach my $Sheet (in $Book->Sheets) { 
    my $LastCol = $Sheet->UsedRange->Find({What=>"*", 
     SearchDirection=>xlPrevious, 
     SearchOrder=>xlByColumns})->{Column}; # mentioned error is from this line 
    my $mylastcol = 'A'; 
    for (my $m=1;$m<$LastCol;$m++) {$mylastcol++;} 
    my @columnheaders = ('A:'.$mylastcol); 
    foreach my $range (@columnheaders){ 
     $Sheet->Columns($range)->AutoFit(); 
    } 
+0

首先,你可以檢查一下,你在使用它之前要查找什麼? '$ Sheet-> UsedRange-> Find({...})'< - 你確定這個對象存在嗎? – gaussblurinc

+0

代碼示例中缺少右捲曲。非常痛苦的看到。請添加它。 (我可以添加它,但我認爲實際上可能還有其他代碼丟失) –

+0

主循環打開中的'in'關鍵字看起來很可疑。除非你使用擴展Perl的模塊(比如Moose),否則它是無效的。 –

回答

2

我寫了一個Perl腳本,使用Spreadsheet :: WriteExcel將一組CSV文件轉換爲電子表格格式。經過一番研究後,我得出結論:沒有選擇將列寬固定爲自適應選項。

Autofit是Excel中的一個運行時選項,因此無法使用Spreadsheet :: WriteExcel通過文件格式創建它。

但是,Spreadsheet :: WriteExcel文檔包含an example of how to simulate autofit,並解釋了所涉及的一些問題。

+0

你知道yar你能解決上面提到的錯誤嗎? –