Python读取带密码的Excel文件:全面指南与实战技巧

Python读取带密码的Excel文件

在日常工作中,我们经常需要处理受密码保护的Excel文件。Python作为强大的数据处理工具,提供了多种方式来实现这一功能。本文将全面介绍几种主流方法,并附带代码示例,帮助你轻松应对带密码的Excel文件。

方法一:使用pywin32(仅限Windows)

pywin32库可以直接调用Windows的Excel应用程序,通过COM接口打开带密码的文件。优点是无需额外解密库,但依赖Excel安装。

import win32com.client

def read_excel_with_password(file_path, password):
    excel = win32com.client.Dispatch("Excel.Application")
    excel.Visible = False
    try:
        workbook = excel.Workbooks.Open(file_path, Password=password)
        sheet = workbook.Worksheets(1)
        data = sheet.UsedRange.Value
        return data
    finally:
        workbook.Close(False)
        excel.Quit()

方法二:使用msoffcrypto-tool(跨平台)

msoffcrypto-tool是一个纯Python库,可以解密受密码保护的Excel文件(包括.xls和.xlsx)。它不需要安装Excel,但只支持某些加密类型。

import msoffcrypto
import io

def decrypt_excel(input_path, output_path, password):
    with open(input_path, 'rb') as file:
        office_file = msoffcrypto.OfficeFile(file)
        office_file.load_key(password=password)
        with open(output_path, 'wb') as decrypted:
            office_file.decrypt(decrypted)

方法三:使用openpyxl(仅.xlsx,弱密码)

openpyxl支持读取加密的.xlsx文件,但仅限于某些简单的加密方式。对于强加密,可能会失败。

from openpyxl import load_workbook

def read_xlsx_with_password(file_path, password):
    wb = load_workbook(file_path, password=password)
    sheet = wb.active
    return sheet

方法四:使用VBA宏(绕过密码)

通过pywin32执行VBA宏可以尝试绕过密码,但需要Excel支持且可能被安全软件拦截。

def break_password_vba(file_path, password_list):
    excel = win32com.client.Dispatch("Excel.Application")
    excel.Visible = False
    for pwd in password_list:
        try:
            workbook = excel.Workbooks.Open(file_path, Password=pwd)
            print(f"Success: {pwd}")
            return workbook
        except:
            continue
    return None

注意事项

  • 密码保护分为“打开密码”和“修改密码”,本文所述均为打开密码。
  • 使用pywin32时,Excel进程可能残留,务必确保关闭。
  • msoffcrypto-tool对某些新版本Excel可能不支持,需测试。
  • 请遵守法律法规,仅用于合法用途。

总结

根据你的操作系统、Excel版本和加密类型,选择合适的方法。推荐使用msoffcrypto-tool进行跨平台解密,或使用pywin32在Windows环境下直接调用Excel。希望本文能帮助你顺利处理带密码的Excel文件。