我正在使用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位: 例子: 有办法做到这一点吗?