Python编写docx转pdf工具触发com_error找不到文件问题
问题原因
报错的核心原因是路径传参错误:
os.listdir()仅返回目录下的文件名/子文件夹名,不会带上父目录路径,你直接把这个裸文件名传给convert函数,相当于传入了相对路径- 调用Microsoft Word的COM组件时,COM进程的默认工作目录会被重置为
C:\Windows\system32,Word会在这个目录下查找你传入的裸文件名,自然触发文件不存在的报错。
另外你直接用字符串加法拼接路径的写法鲁棒性很差,容易出现斜杠缺失、转义字符冲突的问题。
修复代码
修复时要注意所有传入COM接口的路径必须是拼接完成的绝对路径,同时增加必要的异常防护:
import os # 以当前脚本所在目录为基准拼接路径,避免工作目录变动导致路径错误 base_dir = os.path.dirname(os.path.abspath(__file__)) docx_source_dir = os.path.join(base_dir, 'docxFiles') pdf_output_dir = os.path.join(base_dir, 'pdfFiles') # 自动创建输出目录,避免目录不存在报错 os.makedirs(pdf_output_dir, exist_ok=True) for file_name in os.listdir(docx_source_dir): # 过滤非docx格式的文件、Word生成的临时文件 if not file_name.lower().endswith('.docx') or file_name.startswith('~$'): continue # 拼接源文件绝对路径 source_docx = os.path.join(docx_source_dir, file_name) # 拼接输出pdf的绝对路径 output_pdf = os.path.join(pdf_output_dir, f"{os.path.splitext(file_name)[0]}.pdf") # 传入完整绝对路径执行转换 convert(source_docx, output_pdf)
注意事项
- 所有和Office COM组件交互的路径参数,必须传入绝对路径,不要传任何形式的相对路径,避免工作目录不匹配的问题
- 转换逻辑里记得增加Word进程的回收逻辑,避免转换完成后残留WINWORD.EXE后台进程占用资源
- 遍历文件时过滤掉Word打开文档时生成的
~$开头的临时文件,避免尝试转换临时文件报错。
内容的提问来源于stack exchange,提问作者Chris 789
相关产品推荐
相关产品推荐

