我尝试使用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”,并删除了所有公式等......甚至创建了一个新的空白工作簿!
谢谢您的帮助
问候 洛朗
答
我修改的代码(使用原始 “的.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;
}
...它工作正常!
我想我只是发现了这件事。变量$模板使用“../”,它被用Win32 :: OLE模块来“......应用程序数据\漫游\微软\ Windows的”重定向 –