使用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来烘焙内容,然后将该数据传递给您的作者。
使用替代模块将更安全,更便携。