我尝试使用Perl和Win32 ::奥莱

问题描述:

我这个挣扎,有红色的很多文章显示它应该如何工作来修改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的”重定向 –

我修改的代码(使用原始 “的.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; 
} 

...它工作正常!