如何确定excel ODBC后台查询是否已完成刷新

时间:2014-01-23 20:30:58

标签: excel perl vba excel-vba

我有一个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或其他语言中有一个如何执行此操作的示例,我可以在我的代码中使用它。

0 个答案:

没有答案