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

如何使用Python检测xlsx文件是否受密码保护?

用Python检测Excel密码保护并请求密码的实现

所需依赖

先安装必要的库:

pip install openpyxl msoffcrypto-tool

实现步骤

1. 检测Excel文件是否加密

使用msoffcrypto-tool可以直接检测Office文件(包括Excel)是否被密码保护,无需解析文件内容:

import msoffcrypto
import os

def is_excel_encrypted(file_path):
    if not os.path.exists(file_path):
        raise FileNotFoundError(f"文件 {file_path} 不存在")
    
    with open(file_path, "rb") as f:
        try:
            office_file = msoffcrypto.OfficeFile(f)
            return office_file.is_encrypted()
        except Exception:
            # 非标准Office文件默认判定为未加密,可按需调整逻辑
            return False

2. 请求密码并解密打开文件

如果检测到文件加密,就提示用户输入密码,尝试解密后用openpyxl读取内容:

import getpass
from openpyxl import load_workbook
import tempfile

def open_encrypted_excel(file_path):
    if not is_excel_encrypted(file_path):
        return load_workbook(file_path)
    
    # 循环请求密码直到正确
    while True:
        password = getpass.getpass("请输入Excel文件的密码:")
        try:
            with open(file_path, "rb") as f:
                office_file = msoffcrypto.OfficeFile(f)
                office_file.load_key(password=password)
                
                # 解密到临时文件
                with tempfile.NamedTemporaryFile(suffix=".xlsx", delete=False) as temp_f:
                    office_file.decrypt(temp_f)
                    temp_path = temp_f.name
                
                # 加载解密后的文件并清理临时文件
                wb = load_workbook(temp_path)
                os.unlink(temp_path)
                return wb
        except Exception:
            print("密码错误,请重新输入!")

# 示例调用
if __name__ == "__main__":
    excel_path = "your_file.xlsx"
    try:
        wb = open_encrypted_excel(excel_path)
        print("Excel文件成功打开!")
        sheet = wb.active
        print(f"首个工作表名称:{sheet.title}")
    except Exception as e:
        print(f"处理失败:{str(e)}")

注意事项

  • 该方案优先支持.xlsx格式,旧版.xls文件可替换openpyxl为xlrd(需注意xlrd仅支持旧版.xls),配合msoffcrypto-tool的解密逻辑使用。
  • getpass.getpass会隐藏输入的密码,比普通input更安全。
  • 临时文件使用后立即删除,避免残留解密后的明文内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 01:12:08