使用Python操作docm文件遇AttributeError错误的解决咨询
解决python-docx-docm操作docm文件时的AttributeError问题
问题分析
你使用python-docx-docm库操作docm文件时出现AttributeError: 'Part' object has no attribute 'document'错误,但操作docx文件正常,核心原因是当前运行环境实际调用的是不支持docm格式的原python-docx库,而非python-docx-docm扩展库,或库的安装/导入逻辑存在问题。
解决方案
1. 确保正确安装扩展库并卸载原库
原python-docx不支持docm格式,必须替换为扩展库。执行以下命令:
pip uninstall -y python-docx pip install python-docx-docm
2. 验证代码运行逻辑
安装完成后,保持原有代码结构即可,注意路径使用原始字符串避免转义问题:
import docx doc = docx.Document(r'C:\Users\clemdcz\Desktop\my_file.docm') all_paras = doc.paragraphs for para in all_paras: print(para.text) print("-----------")
3. 备选方案:手动移除宏内容后处理
若上述方法无效,可利用docm本质是带宏的zip包特性,先移除宏相关文件再处理:
import zipfile from pathlib import Path import docx # 复制docm并移除宏模块 docm_path = Path(r'C:\Users\clemdcz\Desktop\my_file.docm') temp_docx = docm_path.with_suffix('.docx') with zipfile.ZipFile(docm_path, 'r') as z_in: with zipfile.ZipFile(temp_docx, 'w') as z_out: for file_info in z_in.infolist(): if file_info.filename != 'word/vbaProject.bin': z_out.writestr(file_info, z_in.read(file_info.filename)) # 处理临时docx文件 doc = docx.Document(temp_docx) for para in doc.paragraphs: print(para.text) print("-----------") # 可选:删除临时文件 temp_docx.unlink()
内容的提问来源于stack exchange,提问作者clemdcz
相关产品推荐
相关产品推荐

