python调用win32api 拉起wps问题排查解决方案

系列文章

【毕业设计】基于mqtt+vue+Thinkphp实现校园云打印小程序
(暂未完成更新)

文章目录

  • 系列文章
  • 前言
  • 问题排查
    • 第一个问题,pywintypes.com_error: (-2147221005, '无效的类字符串', None, None)
    • 第二个问题,pywintypes.com_error: (-2147221008, '尚未调用 CoInitialize。', None, None)
  • 总结


前言

因为这篇文章【毕业设计】基于mqtt+vue+Thinkphp实现校园云打印小程序,我想通过mqtt唤醒客户端调用打印机,但是在实现过程中其他生产环境没办法使用,不是出现报错就是未知错误,期间找了很多方案,最后整合一下我的处理结果,建议大家配合文章查看,不然就搞不懂我在说啥


问题排查

第一个问题,pywintypes.com_error: (-2147221005, ‘无效的类字符串’, None, None)

通过编译后的tk软件在其他电脑上能运行但是不会处理,猜想应该是代码错误导致停止运行了

我的验证方法是,在其他电脑上运行源代码,发现出现错误
python调用win32api 拉起wps问题排查解决方案_第1张图片

pywintypes.com_error: (-2147221005, '无效的类字符串', None, None)

解决办法
报错的代码是这一段,大概就是调用wps出错,因为我的wps版本是抢先版,所以需要用kwps

 w = DispatchEx('wps.Application')
 w.Visible = 0  # 不打开软件
w.DisplayAlerts = 0  # 不报错
doc = w.Documents.Open(f)

改了之后的代码,完美运行:

 w = DispatchEx('kwps.Application')
 w.Visible = 0  # 不打开软件
 w.DisplayAlerts = 0  # 不报错
 doc = w.Documents.Open(f)

只需要装有同个版本的wps即可解决

第二个问题,pywintypes.com_error: (-2147221008, ‘尚未调用 CoInitialize。’, None, None)

原因:经网上查明:是由于多线程使用pywin32com造成的问题

解决办法:

import pythoncom
 

# 线程初始化
pythoncom.CoInitialize()
 
# 程序代码
# 程序代码


# 释放资源
pythoncom.CoUninitialize()

于是在调用打印代码的第一行写入线程初始化

pythoncom.CoInitialize()

末尾释放资源

pythoncom.CoUninitialize()

最后代码:

# 线程初始化
pythoncom.CoInitialize()
## 需要打印文件或文件夹的路径
path = r'C:\Users\MAC\Desktop\test'
traver(path)
print("文件读取完毕,共有{}个".format(q.qsize()))
docx_print()
# 释放资源
pythoncom.CoUninitialize()

完美解决以上问题!!!

总结

以上就是记录今天遇到的问题,pywin32api打印机问题完美解决,不过调用的只能是wps
python调用win32api 拉起wps问题排查解决方案_第2张图片

你可能感兴趣的:(python,wps)