Excel:检测OLE自动化?

Excel:检测OLE自动化?,excel,ole,Excel,Ole,我们有一个使用OLE将数据写入Excel的第三方程序。不幸的是,该应用程序的程序员不明白,让excel不可见和隐藏更新可以极大地加快excel的速度。 此时,大型作业需要15分钟才能完成,这非常烦人。 因此,我想编写一个加载项,当程序写入excel时,它会关闭Visibility等。有办法吗?它是唯一使用此技术的应用程序,因此检测COM/OLE交互就足够了。而不是让excel检查它是否在OLE automation手中,可以在windows中检查运行OLE的进程的名称 差不多 Function

我们有一个使用OLE将数据写入Excel的第三方程序。不幸的是,该应用程序的程序员不明白,让excel不可见和隐藏更新可以极大地加快excel的速度。 此时,大型作业需要15分钟才能完成,这非常烦人。
因此,我想编写一个加载项,当程序写入excel时,它会关闭Visibility等。有办法吗?它是唯一使用此技术的应用程序,因此检测COM/OLE交互就足够了。

而不是让excel检查它是否在OLE automation手中,可以在windows中检查运行OLE的进程的名称

差不多

Function isRunning(ProcessName) As Boolean

Dim objWMIcimv2 As Object
Dim objList As Object

Set objWMIcimv2 = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\.\root\cimv2") 'Connect to CIMV2 Namespace

Set objList = objWMIcimv2.ExecQuery _
("select * from win32_process where name='" & ProcessName & "'")

If objList.Count > 0 Then

  isRunning = True

End If
End Function
从那里你可以很容易地抑制屏幕更新。我猜测第三方应用程序通常不会在用户桌面上空闲运行。如果是这样的话,显然这种方法对你没有帮助


终止程序时受此启发的代码

如果要查看excel是否在OLE automation手中,则可以在windows中检查运行OLE的进程的名称

差不多

Function isRunning(ProcessName) As Boolean

Dim objWMIcimv2 As Object
Dim objList As Object

Set objWMIcimv2 = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\.\root\cimv2") 'Connect to CIMV2 Namespace

Set objList = objWMIcimv2.ExecQuery _
("select * from win32_process where name='" & ProcessName & "'")

If objList.Count > 0 Then

  isRunning = True

End If
End Function
从那里你可以很容易地抑制屏幕更新。我猜测第三方应用程序通常不会在用户桌面上空闲运行。如果是这样的话,显然这种方法对你没有帮助


源于此的终止程序代码

如何通过Ribbon或VBA调用加载项?Application.ScreenUpdate=true关闭此功能,但可能需要将其添加到xll/AddinHello中,外部程序是一个独立的应用程序,它使用OLE与Excel通信。此程序没有加载项。我没有办法影响独立程序的程序员,所以我希望检测OLE通信。该计划基本上是这样做的:1。打开excel并创建一个文件2。将数据写入excel 3。保存并退出excel。逻辑是在工作簿中添加将屏幕更新设置为false的功能,然后在工作簿中添加将其设置为true的功能。如果您无法控制文件的创建,那么这是不可能的,因此您需要与该工具的程序员交谈并说服他们,否则这是不可能的。即使您知道如何检测OLE进程,也无法添加代码,因为应用程序会创建Excel的新副本。我认为这是可能的:加载项在每次启动时都由Excel加载,因此启动时,加载项可以查找com活动。如何通过Ribbon或VBA调用加载项?Application.ScreenUpdate=true关闭此功能,但可能需要将其添加到xll/AddinHello中,外部程序是一个独立的应用程序,它使用OLE与Excel通信。此程序没有加载项。我没有办法影响独立程序的程序员,所以我希望检测OLE通信。该计划基本上是这样做的:1。打开excel并创建一个文件2。将数据写入excel 3。保存并退出excel。逻辑是在工作簿中添加将屏幕更新设置为false的功能,然后在工作簿中添加将其设置为true的功能。如果您无法控制文件的创建,那么这是不可能的,因此您需要与该工具的程序员交谈并说服他们,否则这是不可能的。即使您知道如何检测OLE进程,也没有地方添加代码,因为应用程序会创建Excel的新副本。我认为这是可能的:加载项在每次启动时都由Excel加载,因此启动时,加载项可以查找com活动。这对命令行应用程序可能吗?遗留应用程序如下所示:GUI使用参数调用无窗口cmd应用程序。您的解决方案非常有趣,谢谢!对执行命令行.exe文件时,该文件应显示在进程列表中。我刚刚用ruby ole进行了测试,上面的代码能够检测到它。谢谢!我会在圣诞节后再试,然后再报告。这对命令行应用程序是可能的吗?遗留应用程序如下所示:GUI使用参数调用无窗口cmd应用程序。您的解决方案非常有趣,谢谢!对执行命令行.exe文件时,该文件应显示在进程列表中。我刚刚用ruby ole进行了测试,上面的代码能够检测到它。谢谢!圣诞节后我会试试,然后再回来报告。