Python3.6+Django1.11用win32com转Word为PDF遇类型不匹配错误求助
解决Win32com调用Word转PDF时的类型不匹配错误
嘿,我一眼就看出你遇到的问题啦!那个Tipo não correspondente.(类型不匹配)的错误,根源是你给Word的Documents.Open方法传错参数了。
你代码里写的word.Documents.Open(in_file, 'rb'),第二个参数'rb'是Python里打开文件的二进制只读模式,但Word的Open方法根本不认识这个参数!它的第二个参数是ConfirmConversions,用来控制是否弹出文件转换确认框,应该传布尔值(True/False)或者对应的整数(1/0),传字符串肯定会触发类型不匹配的报错。
另外你代码里还有个小疏漏:doc.SaveAs(new_file, FileFormat=17)里的new_file没定义,应该改成你之前声明的out_file才行。
给你修正后的完整代码,还加了一些实用的细节(比如让Word后台运行不弹窗口、异常处理确保进程退出):
import win32com.client as win32 from os import path try: # 启动Word实例,设置为后台运行(不显示窗口) word = win32.DispatchEx("Word.Application") word.Visible = False filedoc = 'c:\\growthtech\\Capturar6.docx' filepdf = 'c:\\growthtech\\Capturar6.pdf' in_file = path.abspath(filedoc) out_file = path.abspath(filepdf) # 正确调用Open方法:第二个参数传0表示不弹出转换确认框 doc = word.Documents.Open(in_file, 0) # FileFormat=17是Word对应PDF格式的标准枚举值 doc.SaveAs(out_file, FileFormat=17) doc.Close() except Exception as e: print(f"转换过程出错啦:{str(e)}") finally: # 无论成功失败,都确保Word进程退出,避免后台残留 word.Quit()
最后再给你几个要注意的点:
- 必须确保你的电脑安装了Microsoft Word,Win32com是依赖Word的COM组件才能工作的,WPS可能不兼容哦
- 保存PDF的目标路径要有写入权限,不然会报权限错误
- 如果你的Word版本比较特殊,
FileFormat=17可以查一下对应版本的枚举值,不过17是PDF的通用值,大部分版本都能用 - 一定要用
finally块调用word.Quit(),不然就算报错,Word进程也会留在后台占用系统资源
内容的提问来源于stack exchange,提问作者Patricia




