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

Data inconsistency issue while writing data into different excel files simultaneously using Perl Excel OLE

使用以下 perl 脚本,我试图同时打开数据并将数据写入不同的 Excel 工作表。

虽然它有效,但我发现这种方法存在一些数据不一致问题。

即在 file2 中可以看到一些 file1 数据,反之亦然。

我对 Perl OLE 句柄不是很清楚。由于它对不同文件具有相同的 perl OLE 句柄,perl 是否将所有不同的文件视为一个?

如果是这样,如何避免这种情况?

perl Parser.pl C:\\
eport1.xlsx

perl Parser.pl C:\\
eport2.xlsx

perl Parser.pl C:\\
eport3.xlsx

解析器.pl

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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 而不是 new。请注意,如果您这样做,那么您可能希望在所有脚本调用完成后打开新的 excel 并关闭它。

您可能会考虑使用 Excel::Writer::XLSX 或类似的界面作为构建电子表格的界面。这将不依赖于 Excel 或 Windows。如果您要追加、更改电子表格文件,那么您需要使用 Spreadsheet::Read 烘焙某些内容以获取内容,然后将该数据传递给您的编写器。

使用备用模块会更安全、更便携。