当前位置: 首页 > 面试题库 >

COM:excelApplication.Application.Quit()保留进程

司寇照
2023-03-14
问题内容

我正在使用COM集成从Python 2.7驱动MS Excel。我注意到一个奇怪的事情:当我运行以下代码时:

import win32com.client
excelApp = win32com.client.dynamic.Dispatch('Excel.Application')

EXCEL.EXE过程中出现的过程列表(视图中使用Windows任务管理器或上subprocess.Popen('tasklist'))按预期方式。然后,我会做所有我不需要做的事情。但是,当我关闭Excel时:

excelApp.Application.Quit()

即使我关闭了启动它的Python解释器,该过程仍然会持续(这种情况很有意义,因为Excel在不同的过程中运行,但可以肯定)。我发现终止此过程的唯一方法是手动使用任务管理器,或通过调用:

subprocess.Popen("taskkill /F /im EXCEL.EXE",shell=True)

强制/F标记是必需的,否则该过程不会终止。

这不是一个真正的问题(我希望),但是我想问一下,当我首先“正常”编辑文档,然后从python调用Excel,然后再次“正常”调用文档时,是否会引起问题?可能连续很多(几打)次?我担心的是创建有冲突的文档等版本。还是EXCEL.EXE为了安全起见,我应该每次都终止该过程吗?

我也注意到,subprocess.Popen("taskkill")它不会返回任何我可以catch并且可能会返回的异常(或者我在这里做些什么吗?)。我对区分“不存在的进程”杀死尝试和终止进程的失败尝试特别感兴趣。


问题答案:

尝试关闭所有打开的书,告诉应用退出并删除对应用的任何引用。我通常将com对象包装在一个类中。这就是我的退出方法的样子。

      def quit(self):
        self.xlBook.Close(SaveChanges=0)
        self.xlApp.Quit()
        del self.xlApp

您是从主线程调用Dispatch吗?如果不确定,请致电

pythoncom.CoInitialize()

派遣前,以及

pythoncom.CoUninitialize()

退出后



 类似资料:
  • 为了便于编程,CodeIgniter使用了一系列的函数和名称来完成操作。所以,有些名称不能被程序员使用。下面是不能被程序员使用的保留字列表。 控制器 因为你的控制器类将继承主程序控制器,所以你的函数命名一定不能和主程序控制器类中的函数名相同,否则你的局部函数将会覆盖他们。下面列出了已经保留的名称,请不要将你的控制器命名为这些: Controller CI_Base _ci_initialize D

  • Javascript 保留字 abstract boolean byte char class const debugger double enum export extends final float goto implements import int interface long native package private protected public short static sup

  • SQL 保留字 ABCDEFGHIJKLMNOPQRSTUVWXYZ 下表包括了所有 Microsoft Jet 数据库引擎保留的用于 SQL 语句的字。列表中的字,若不是全部大写,也被其它应用程序所保留。因此,对于这些字的各个帮助主题只提供了通常的描述,并未着重 SQL的用法。 注意 跟着一星号 * 的词是被保留的,但是当前在 Microsoft® Jet SQL 语句的范畴内并没有意义(例如,

  • 为了便于编程,CodeIgniter 使用了一些函数、方法、类 和 变量名来实现。 因此,这些名称不能被开发者所使用,下面是不能使用的保留名称列表。 控制器名称 因为你的控制器类将继承主程序控制器,所以你的方法命名一定不能和 主程序控制器类中的方法名相同,否则你的方法将会覆盖他们。 下面列出了已经保留的名称,请不要将你的控制器命名为这些: CI_Controller Default index 函

  • 我正在使用DecimalFormats将双打格式化为字符串。然后这个字符串被集成到我的表示层中。 问题:我想保留所有的小数。示例:“12345678.123456789” 格式:#.#- 我可以用##########对于大小数点,但是如果小数点更长呢? 我发现我的小测试程序很有用,想和大家分享。 你能帮我显示所有小数吗? 这导致: 编辑:一位用户提到了一个相关的问题:如何很好地将浮点数格式化为字符

  • 我正在尝试使用Python中的bin()函数将整数转换为二进制。但是,它总是删除前导零,这是我实际需要的,因此结果总是8位: 例子: 有办法做到这一点吗?