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

时间:2014-01-31 22:54:08

标签: excel perl excel-vba ole vba

使用以下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();

1 个答案:

答案 0 :(得分:3)

问题肯定在OLE接口中。一旦打开实例,就可以尝试使用Win32 :: OLE-> GetActiveObject而不是new。请注意,如果您这样做,那么您可能想要打开新的Excel并在完成所有脚本调用后关闭它。

如果不这样做,您可以考虑使用Excel::Writer::XLSX或类似的界面来构建电子表格。这将不依赖于Excel或窗口。如果您要附加,更改电子表格文件,则需要使用Spreadsheet::Read烘焙内容以获取内容,然后将该数据传递给您的作者。

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