我有一个遗留应用程序,它在许多Excel工作簿中实现。这不是我有权重新实现的东西,但是我维护的另一个应用程序需要能够调用Excel工作簿中的函数。在
它被赋予了一个使用Win32Com库的python接口。其他进程可以调用python包中的函数,然后通过Win32Com调用我需要的函数。在
不幸的是,COM不允许我指定一个特定的COM进程,所以现在无论我的服务器有多强大,我一次只能在计算机上控制一个Excel实例。如果我试图运行多个excel实例,就无法确保python层绑定到特定的excel实例。在
我希望能够在Windows服务器上同时运行一个以上的excel应用程序。有办法吗?例如,我是否可以划分我的环境,以便我可以运行尽可能多的Excel\uupython组合以支持我的应用程序?在
参见"Starting a new instance of a COM application" by Tim Golden,也引用了here,它给出了使用的提示
而不是
^{pr2}$开始一个单独的过程。所以你应该能够做到:
请注意完成后,要关闭应用程序,我发现必须执行以下操作:
我发现进程直到
xl_app = None
才会关闭,也就是说,Python COM对象的引用计数为零。在注意我还有一个问题:当我的Python程序正在运行时,如果我在资源管理器中双击一个Excel文件(至少在Win2k上),它最终会在Python启动的现有Excel进程中打开该文件(它正在隐藏运行),这会中断Python程序。我还没有找到解决办法。在
如果您的应用程序使用一个包含宏的excel文件,我担心答案可能是否定的,因为除了COM excel不允许用相同的名称打开同一个文件(即使在不同的目录中)。您可以通过在打开之前将文件动态复制到另一个名称来解决此问题。在
我对python的了解并不多,但在大多数语言中,有一种方法可以指定在创建COM对象时,默认情况下是希望它成为新对象还是连接到预先存在的实例。检查python文档中的以下内容。在
你能列出你遇到的具体问题以及你希望做什么吗?在
不幸的是,我对Python一无所知,但如果它能通过COM工作,Excel就不是一个单一的实例应用程序,所以您应该能够创建尽可能多的Excel实例。在
使用C,您可以通过以下方式创建多个Excel应用程序实例:
在C中使用后期绑定,您可以使用:
^{pr2}$如果使用VB.NET版,VB6或VBA您可以使用CreateObject,如下所示:
不幸的是,在Python中,我没有任何线索。但是除非Python有一些限制(我无法想象?)那么我会认为这是非常有能力的。在
这就是说,让多个Excel实例充当其他操作的某种服务器的想法听起来相当不切实际。。。我会仔细测试您正在做什么,特别是在没有内存耗尽的情况下一次可以打开多少个实例,以及如果Excel由于某种原因崩溃,调用程序会发生什么情况。在
相关问题 更多 >
编程相关推荐