使用Perl Excel OLE同时将数据写入不同的Excel文件时出现数据不一致问题

使用下面的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

Parser.pl

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(); 

问题是肯定在OLE界面。 一旦打开实例,就可以尝试Win32 :: OLE-> GetActiveObject而不是新build。 请注意,如果你这样做,那么你可能想要打开新的excel,并在所有的脚本调用完成后closures它。

否则,你可能会考虑使用Excel :: Writer :: XLSX或类似的接口来构build电子表格。 这不会依赖于Excel,或窗口的事情。 如果您正在追加,更改电子表格文件,那么您将需要使用Spreadsheet :: Read来烘焙内容,然后将该数据传递给您的作者。

使用替代模块将更安全,更便携。