You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python编辑已知密码的受保护Excel(xlsx)文件

已知密码的加密Excel(xlsx)文件编辑方案

已知密码但无法直接修改加密xlsx文件时,核心思路是先解密获取可编辑副本,修改后重新加密,以下是两种可行的Python实现方案:

方案1:跨平台通用(msoffcrypto-tool + openpyxl)

借助msoffcrypto-tool解密加密文件,用openpyxl完成内容编辑,最后重新加密保存。

安装依赖

pip install msoffcrypto-tool openpyxl

完整代码

import msoffcrypto
from openpyxl import load_workbook
import io

# 1. 读取并解密加密文件
with open("encrypted_file.xlsx", "rb") as f:
    office_file = msoffcrypto.OfficeFile(f)
    office_file.load_key(password="your_password")  # 替换为实际密码
    decrypted_data = io.BytesIO()
    office_file.decrypt(decrypted_data)

# 2. 加载解密文件并编辑内容
decrypted_data.seek(0)
wb = load_workbook(decrypted_data)
ws = wb.active

# 示例修改操作
ws["A1"] = "Updated content"
ws["B2"].value = 999

# 3. 保存修改后的内容到内存流
modified_data = io.BytesIO()
wb.save(modified_data)
modified_data.seek(0)

# 4. 重新加密并输出文件
with open("updated_encrypted_file.xlsx", "wb") as f:
    new_office_file = msoffcrypto.OfficeFile(modified_data)
    new_office_file.load_key(password="your_password")  # 可设原密码或新密码
    new_office_file.encrypt(f, password="your_password")

方案2:Windows专属(pywin32)

直接调用本地Excel COM对象,模拟人工操作打开加密文件、修改、保存,无需手动处理解密加密流程。

安装依赖

pip install pywin32

完整代码

import win32com.client as win32

# 启动Excel后台进程
excel = win32.gencache.EnsureDispatch('Excel.Application')
excel.Visible = False

# 打开加密文件
wb = excel.Workbooks.Open("encrypted_file.xlsx", Password="your_password")
ws = wb.ActiveSheet

# 执行修改
ws.Range("A1").Value = "Modified via pywin32"
ws.Cells(3, 3).Value = "New data"

# 保存(覆盖原文件或另存为)
wb.Save()  # 直接覆盖原加密文件
# wb.SaveAs("new_encrypted_file.xlsx", Password="your_password")  # 另存为新加密文件

# 清理资源
wb.Close()
excel.Quit()

关键注意事项

  • msoffcrypto-tool仅支持Office Open XML格式(xlsx),老版xls文件不兼容。
  • pywin32方案要求本地安装Excel软件,且版本需与库兼容。
  • 操作前务必备份原文件,避免数据丢失。

内容的提问来源于stack exchange,提问作者Bireysel Finans

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 03:10:45