使用以下perl脚本,我正在尝试同时打开并将数据写入不同的Excel工作表。
虽然它有效,但我发现这种方法存在一些数据不一致的问题。
即。一些file1数据在file2中可见,反之亦然。
我对Perl OLE句柄没有清楚的了解。由于它为不同的文件提供了相同的perl OLE句柄,perl是否将所有不同的文件视为一个?
如果它如此避免这种情况?
perl Parser.pl C:\ report1.xlsx
perl Parser.pl C:\ report2.xlsx
perl Parser.pl C:\ report3.xlsx
use Win32::OLE qw(in with); # OLE Automation extensions
use Win32::OLE::Const 'Microsoft Excel'; # Extract constant definitions from TypeLib
unless (defined $Excel1) {
$Excel1 = Win32::OLE->new('Excel.Application', sub {$_[0]->Quit;})
or die "Oops, cannot start Excel";
}
$ReportFile = $ARGV[0];
# Open workbook
my $Book1 = $Excel1->Workbooks->Open($ReportFile);
{
#### WRTIE DATA INTO EXCEL ####
}
$Book1->Save;
$Book1->Close();
答案 0 :(得分:3)
问题肯定在OLE接口中。一旦打开实例,就可以尝试使用Win32 :: OLE-> GetActiveObject而不是new。请注意,如果您这样做,那么您可能想要打开新的Excel并在完成所有脚本调用后关闭它。
如果不这样做,您可以考虑使用Excel::Writer::XLSX或类似的界面来构建电子表格。这将不依赖于Excel或窗口。如果您要附加,更改电子表格文件,则需要使用Spreadsheet::Read烘焙内容以获取内容,然后将该数据传递给您的作者。
使用备用模块将更安全,更便携。