我尝试使用Perl和Win32 :: Ole

时间:2017-10-16 12:12:56

标签: excel perl win32ole

我正在努力解决这个问题并且发表了许多文章,说明它应该如何运作,但我没有成功:

我的系统是安装并激活了Office 2016的Windows 7。 我想使用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"保存了我的工作簿to" .xls"并删除所有公式等...甚至创建一个新的空白工作簿!

感谢您的帮助

此致 劳伦

1 个答案:

答案 0 :(得分: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;
}

......它运作正常!