如果多线程情况下直接使用win32操作wps,会报错:pywintypes.com_error: (-2147221008, '尚未调用 CoInitialize。', None, None)
此时需要线程初始化,参考自python调用win32api 拉起wps问题排查解决方案
import pythoncom
import win32
def ui():
pythoncom.CoInitialize()
wps = Dispatch("Kwps.Application")
wps.Visible = True
myWps = wps.Documents.Open(os.path.abspath("./12.docx"))
myWps.Save()
print("新线程")
pythoncom.CoUninitialize()
b = threading.Thread(target=ui)
b.start()
完整代码如下:
"""
多线程情况下使用win32操作wps
"""
from tkinter import *
import time
import threading
import os
import xlwings as xw
from win32com.client import Dispatch
import pythoncom
import win32
# 主窗口
root_windows = Tk()
root_windows.geometry("300x320")
# 滚动条
s = Scrollbar(root_windows)
s.pack(side=RIGHT, fill=Y)
# 列表
lists = Listbox(root_windows, yscrollcommand=s.set, font=('Time', 15), width=320)
lists.pack()
# 绑定
lists.config(yscrollcommand=s.set)
s.config(command=lists.yview())
def add():
n = 15
for i in range(0, 15):
lists.insert(lists.size(), i)
lists.see(lists.size())
time.sleep(1)
# 新线程往图形界面添加数据
t = threading.Thread(target=add)
t.start()
def ui():
pythoncom.CoInitialize()
wps = Dispatch("Kwps.Application")
wps.Visible = True
# 调用wps打开文档
myWps = wps.Documents.Open(os.path.abspath("./12.docx"))
myWps.Save()
print("新线程")
pythoncom.CoUninitialize()
# 新线程操作wps
b = threading.Thread(target=ui)
b.start()
root_windows.mainloop()