gpt4 book ai didi

python - 如何强制 python(使用 win32com)创建一个新的 excel 实例?

转载 作者:太空狗 更新时间:2023-10-29 19:28:45 25 4
gpt4 key购买 nike

我正在自动化一些需要很长时间的 excel 相关任务。

我正在使用以下方法创建一个 excel 实例:

excel = win32.gencache.EnsureDispatch('Excel.Application')
wb = excel.Workbooks.Add()

但是,在脚本开始运行后,如果我选择一个打开的 excel 工作簿(不是 python 正在处理的工作簿),python 脚本会崩溃。但是,如果我打开一个新的 excel 工作簿并在其中键入内容,则 python 脚本不受影响。

有没有一种特殊的方法可以调用 excel 来防止这种情况发生?或者任何其他解决方案?

编辑:这似乎有效。

excel = win32.DispatchEx('Excel.Application')

最佳答案

这是一种创建新实例的方法使用静态缓存(速度更快并且能够使用 kwargs):

import sys
import shutil
import pythoncom
from win32com.client import gencache

def EnsureDispatchEx(clsid, new_instance=True):
"""Create a new COM instance and ensure cache is built,
unset read-only gencache flag"""
if new_instance:
clsid = pythoncom.CoCreateInstanceEx(clsid, None, pythoncom.CLSCTX_SERVER,
None, (pythoncom.IID_IDispatch,))[0]
if gencache.is_readonly:
#fix for "freezed" app: py2exe.org/index.cgi/UsingEnsureDispatch
gencache.is_readonly = False
gencache.Rebuild()
try:
return gencache.EnsureDispatch(clsid)
except (KeyError, AttributeError): # no attribute 'CLSIDToClassMap'
# something went wrong, reset cache
shutil.rmtree(gencache.GetGeneratePath())
for i in [i for i in sys.modules if i.startswith("win32com.gen_py.")]:
del sys.modules[i]
return gencache.EnsureDispatch(clsid)

wdApp = EnsureDispatchEx("Word.Application")

更新:改进后的版本会在出错时重置缓存

关于python - 如何强制 python(使用 win32com)创建一个新的 excel 实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5310255/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com