python自动移除excel文件密码(升级v2版本)

欢迎查看第一版

https://blog.csdn.net/weixin_45631815/article/details/140013476?spm=1001.2014.3001.5502

一功能改进

此版本主要改进功能有以下:

  1. 直接可以调用函数实现
  2. 可以尝试多个密码
  3. 没有加密的文件进行保存,可以按实际业务进行改进.
  4. 思路来源:java 面向对象设计模式.(解码失败后的策略模式1进行尝试2对异常进行处理)

二具体代码实现

python 复制代码
import msoffcrypto
import os
# 已加密Excel文件路径
encrypted_file = r"已加密Excel文件路径"
# 未加密文件将保存的路径
unencrypted_file = r"未加密文件将保存的路径"
# Excel文件可能的密码列表
excel_passwords = ["密码1", "密码2"]
def decrypt_excel(encrypted_file, unencrypted_file, excel_passwords):
    for password in excel_passwords:
        try:
            # 打开加密文件
            with open(encrypted_file, "rb") as encrypted_file_fd:
                office_file = msoffcrypto.OfficeFile(encrypted_file_fd)

                # 尝试使用当前密码解密
                office_file.load_key(password=password)

                # 如果没有抛出异常,说明密码正确,进行解密并跳出循环
                with open(unencrypted_file, "wb") as unencrypted_file_fd:
                    office_file.decrypt(unencrypted_file_fd)

                print(f"文件已使用密码'{password}'解密并保存至:{unencrypted_file}")
                break  # 密码正确,解密完成,结束循环

        except msoffcrypto.exceptions.InvalidKeyError:
            continue  # 当前密码错误,尝试下一个密码
        # 如果文件[Unencrypted document]没有加密直接就退出循环
        except msoffcrypto.exceptions.FileFormatError:
            # 没有加密的文件,直接复制操作
            with open(unencrypted_file, "wb") as unencrypted_file_fd:
                unencrypted_file_fd.write(open(encrypted_file, "rb").read())
            break
        except Exception as e:
            print(f"解密过程中发生错误:{e}")
            break  # 发生其他错误,结束循环
directory_path = r"G:\路径加密"
for root, dirs, files in os.walk(directory_path):
    for file in files:
        print(os.path.join(root, file))
        m=r'{}'.format(os.path.join(root, file))
        outm=r'{}'.format(os.path.join(root.replace('加密',''),file))
        decrypt_excel(m,outm,excel_passwords)

三其他改进

欢迎交流不同改进意见

相关推荐
脉动数据行情121 分钟前
C# 实现德指 DAX 期货 WebSocket 实时行情监听
开发语言·websocket·c#
大圣编蚕1 小时前
Java ByteArrayInputStream 详解:从入门到实战
java·开发语言·算法
菜鸟~noob2331 小时前
【电子战】第02篇:能量检测器 vs. 相关检测器【含matlab代码】
开发语言·matlab
linweidong2 小时前
中科闻歌Java面试题及参考答案
java·python·大模型·提示词·ai agent·mcp·rag原理
OpenAnolis小助手2 小时前
一句话看透 JVM,SysOM 诊断 Skill 新增 Java 应用诊断能力
java·开发语言·jvm·阿里云·操作系统控制台·sysom
The Future is mine2 小时前
Excel如何只允许对部分表格内容进行修改
excel
小玮看世界2 小时前
[Python]OD算法在OD实际运用转化参考清单
开发语言·python·算法
萧鼎2 小时前
2026实战:用 tomlkit 优雅读写 TOML 配置,告别手写解析器
python·开源·教程·python库
ForteScarlet2 小时前
Kotlin 2.4.20 现已发布,新特性多不多?
android·java·开发语言·开源·kotlin·jetbrains
萧瑟余晖2 小时前
Java深入解析篇六十二之安全机制详解
java·开发语言