macOS下Python打开密码保护Word/docx的等效代码方案
问题根因
你原有代码依赖Windows专属的COM组件接口调用本地Word程序,comtypes是仅适配Windows平台的COM封装库,macOS无COM运行环境,因此会抛出导入错误,不存在跨平台直接兼容的写法,需要改用macOS支持的实现路径。
方案1:调用本地Microsoft Word客户端打开(与原Windows代码行为完全一致)
macOS版Microsoft Word原生支持AppleScript脚本控制,无需安装额外专属依赖,直接用Python内置模块即可实现和原代码完全等效的效果:启动Word程序、传入密码、以只读模式打开目标文档。
实现代码:
import subprocess def open_password_protected_docx(file_path: str, password: str, read_only: bool = True): apple_script = f''' tell application "Microsoft Word" activate open POSIX file "{file_path}" password document "{password}" read only {str(read_only).lower()} end tell ''' subprocess.run( ["osascript", "-e", apple_script], check=True, capture_output=True ) # 调用示例:替换为你的文件绝对路径和文档密码 wordPathFile = "/Users/yourname/Documents/your_encrypted_file.docx" the_pwd = "your_document_password" open_password_protected_docx(wordPathFile, the_pwd)
注意事项:
file_path必须传入macOS格式的绝对路径(以/开头,不要用Windows的盘符路径)- 首次运行时系统会弹出权限提示,允许当前运行Python的终端/编辑器控制Microsoft Word即可
- 代码默认以只读模式打开,和你原Windows代码参数一致,如果需要可编辑模式,调用函数时传入
read_only=False
方案2:纯Python解密读取(不依赖本地安装Word)
如果你的需求不是拉起Word窗口打开文件,只是需要读取/处理加密docx的内容,可以用纯Python库实现解密和读取,全平台兼容,不需要本地安装Office。
首先安装依赖:
pip install msoffcrypto-tool python-docx
实现代码:
import io import msoffcrypto from docx import Document wordPathFile = "/Users/yourname/Documents/your_encrypted_file.docx" the_pwd = "your_document_password" # 将解密后的文档加载到内存 decrypted_buffer = io.BytesIO() with open(wordPathFile, "rb") as f: office_doc = msoffcrypto.OfficeFile(f) office_doc.load_key(password=the_pwd) office_doc.decrypt(decrypted_buffer) # 读取解密后的文档内容 decrypted_buffer.seek(0) doc = Document(decrypted_buffer) # 示例:打印文档所有段落文本 for para in doc.paragraphs: print(para.text) # 如需保存为无密码的普通docx,取消注释以下代码 # with open("decrypted_output.docx", "wb") as f: # f.write(decrypted_buffer.getvalue())
注意事项:
- 该方案不会启动Word客户端,适合批量处理文档内容的场景
- 仅支持Office 2007及以上版本的
.docx格式,不支持旧版.doc二进制格式
内容的提问来源于stack exchange,提问作者X0-user-0X
相关产品推荐
相关产品推荐

