我有一个perl应用程序,它打开Excel 2010电子表格并运行RefreshAll命令。电子表格有许多ODBC查询,每个查询大约需要20分钟才能返回结果。由于查询的数量和每个查询的时间,它们必须在后台运行。我需要能够确定所有查询何时完成,以便我可以保存电子表格。我尝试使用Workbook-> Connections-> ODBCConnection-> Refreshing属性来确定这一点。但是,一旦执行了Workbook-> RefreshAll命令,这就不起作用了。当我添加一些调试代码来打印出连接名称时,它什么都不返回。但是,如果我不执行RefreshAll命令,我将为Connection获取一个值,并且我能够看到刷新命令的值(0,因为它尚未执行)。我看过类似的帖子,说明查询需要在前台执行。这不是一个选项,因为我不能等待每个查询一次执行一个查询超过16个小时。它们必须并行执行,然后它们将在30分钟内完成。这是我的代码:
$book->RefreshAll;
# allow the connections to be established
sleep 10;
while (1 == 1) {
foreach my $conn (in $book->{Connections}){
# Never gets in this loop unless the RefreshAll command is commented out
&LOG("Found connection $conn->{Name}\n");
$oc = $conn->{ODBCConnection};
$refreshing += $oc->{Refreshing};
}
&LOG("REFRESH loop has a value of $refreshing\n");
if ($refreshing == 0) {
last;
}
sleep 30;
}
如果有人在perl或VBA或其他语言中有一个如何执行此操作的示例,我可以在我的代码中使用它。