查看: 209|回复: 3

Python加密解密Excel:Spire.XLS打开密码与批量处理

[复制链接]
发表于 1 小时前 | 显示全部楼层 |阅读模式
Excel工资表、客户名单和财务报表通常包含敏感数据,通过邮件或网盘共享前设置打开密码,可以限制未经授权的人员查看工作簿内容。本文围绕Spire.XLS for Python,整理用脚本为Excel工作簿设置打开密码、用密码打开已加密文件、解除密码保护以及批量处理文件夹中Excel文件的方法。需要先说明:这里处理的是工作簿打开密码,和限制工作表编辑、保护单元格不是同一类功能。

一、环境准备

原文使用Spire.XLS for Python完成加密和解密,不依赖本地安装Microsoft Excel。先在终端或命令提示符中安装:
  1. pip install Spire.XLS
复制代码

安装后在Python脚本中导入模块:
  1. from spire.xls import *
  2. from spire.xls.common import *
复制代码

二、为Excel工作簿设置打开密码

如果希望其他人打开文件时必须输入密码,可以在加载工作簿后调用Protect(password)设置打开密码,再通过SaveToFile()保存修改。下面的示例用密码eiceblue保护工作簿,并另存为新文件:
  1. from spire.xls import *
  2. from spire.xls.common import *
  3. inputFile = 'EncryptWorkbook.xlsx'
  4. outputFile = 'EncryptWorkbook_out.xlsx'
  5. workbook = Workbook()
  6. workbook.LoadFromFile(inputFile)
  7. # 为工作簿设置打开密码
  8. workbook.Protect('eiceblue')
  9. workbook.SaveToFile(outputFile, ExcelVersion.Version2010)
  10. workbook.Dispose()
复制代码

关键调用是workbook.Protect('eiceblue'),它负责给工作簿设置打开密码;设置完成后必须调用SaveToFile()写入文件。生成的EncryptWorkbook_out.xlsx在Excel中打开时会要求输入密码,只有密码正确才能查看工作簿内容。

三、使用密码打开已加密的Excel文档

如果要读取或修改已经加密的Excel文件,需要先用正确的打开密码加载工作簿。Spire.XLS提供OpenPassword属性,使用时要注意顺序:必须先设置OpenPassword,再调用LoadFromFile()。如果密码不正确,加载文件时可能抛出SpireException,因此可以用try/except捕获异常,避免程序直接中断。

下面的示例遍历候选密码,尝试打开指定文件并判断密码是否正确:
  1. from spire.xls import *
  2. from spire.xls.common import *
  3. inputFile = 'EncryptedFile.xlsx'
  4. passwords = ['password1', 'password2', 'password3', '1234']
  5. i = 0
  6. while i < len(passwords):
  7.     try:
  8.         workbook = Workbook()
  9.         # 设置打开密码
  10.         workbook.OpenPassword = passwords[i]
  11.         # 加载加密文档
  12.         workbook.LoadFromFile(inputFile)
  13.         print('密码 = ' + passwords[i] + ' 正确,文件已成功打开!')
  14.         workbook.Dispose()
  15.     except SpireException as ex:
  16.         print('密码 = ' + passwords[i] + ' 不正确')
  17.     i += 1
复制代码

这种方式适合在已有合法授权候选密码的情况下验证密码,实际使用时不要把密码尝试用于未经授权的文件。

四、解除Excel工作簿的密码保护

如果需要对已加密的Excel文件继续处理,或者希望移除打开密码,可以在使用正确密码加载工作簿后调用UnProtect()解除保护。原文示例先用Workbook.IsPasswordProtected(inputFile)判断文件是否受密码保护,再决定是否执行解密流程:
  1. from spire.xls import *
  2. from spire.xls.common import *
  3. inputFile = 'DecryptWorkbook.xlsx'
  4. outputFile = 'DecryptWorkbook_out.xlsx'
  5. # 判断文档是否受密码保护
  6. isProtected = Workbook.IsPasswordProtected(inputFile)
  7. if isProtected:
  8.     workbook = Workbook()
  9.     # 使用原密码打开工作簿
  10.     workbook.OpenPassword = 'eiceblue'
  11.     workbook.LoadFromFile(inputFile)
  12.     # 解除密码保护
  13.     workbook.UnProtect()
  14.     workbook.SaveToFile(outputFile, ExcelVersion.Version2013)
  15.     workbook.Dispose()
  16.     print('已成功解除密码保护。')
  17. else:
  18.     print('该文件未加密,无需解密。')
复制代码

Workbook.IsPasswordProtected()直接接收文件路径并返回布尔值,可作为解密前的检查步骤。解除密码保护的前提是能够用正确密码打开工作簿;调用UnProtect()后还需要SaveToFile()保存,生成的文件才会真正移除原有打开密码。

五、批量加密文件夹中的Excel文档

当需要处理的Excel文件较多时,逐个加载并设置密码比较耗时。可以结合os.walk()遍历指定目录,将加密操作放进循环中。下面的示例遍历excel_files文件夹,为其中的.xlsx和.xls文件设置统一打开密码,并在原文件名前添加enc_前缀保存结果:
  1. import os
  2. from spire.xls import *
  3. from spire.xls.common import *
  4. folder = 'excel_files'
  5. password = 'eiceblue'
  6. for root, dirs, files in os.walk(folder):
  7.     for file in files:
  8.         if file.lower().endswith(('.xlsx', '.xls')):
  9.             path = os.path.join(root, file)
  10.             workbook = Workbook()
  11.             workbook.LoadFromFile(path)
  12.             # 为工作簿设置打开密码
  13.             workbook.Protect(password)
  14.             out = os.path.join(root, 'enc_' + file)
  15.             workbook.SaveToFile(out, ExcelVersion.Version2010)
  16.             workbook.Dispose()
  17.             print('已加密:' + file)
复制代码

这段代码通过两层循环遍历指定目录及其子目录,筛选出Excel文件后依次执行加载、加密和保存。批量处理时要及时调用Dispose()释放每个Workbook对象,避免处理大量文件时持续占用内存和文件资源。批量解密也可以采用类似循环:为每个工作簿设置正确的OpenPassword,加载文件后调用UnProtect(),最后保存处理结果。

六、实用技巧与注意事项

密码需要妥善管理。加密时设置的打开密码,就是后续加载文件时需要提供的密码。实际项目中建议把密码放在安全的配置或密钥管理服务中,不要直接硬编码在脚本里。

处理前建议备份原始文件。加密和解密都会改变工作簿的密码保护状态,最好把结果另存为新文件,保留原始文件以便检查或重新处理。

每个工作簿处理完成后调用Dispose(),批量处理多个文件时尤其重要,可以减少资源持续占用。密码不正确时,可以用try/except SpireException捕获加载异常,避免单个文件失败导致整个批处理任务中断。

最后要注意功能边界:本文介绍的是工作簿打开密码,并不等同于限制用户修改工作表结构或编辑特定单元格。实际使用时,应根据保护目标选择对应功能。

总结来说,Spire.XLS for Python可以通过Protect()设置打开密码,通过OpenPassword配合LoadFromFile()打开加密工作簿,通过UnProtect()解除密码保护;结合os.walk()和IsPasswordProtected(),还可以自动完成批量加密或解密。把这些方法用于日常文档处理流程,可以减少手动设置密码的工作量,也便于管理敏感Excel文件。
回复

使用道具 举报

发表于 1 小时前 | 显示全部楼层

Re: Python加密解密Excel:Spire.XLS打开密码与批量处理

这篇整理得很清楚,尤其是开头区分“打开密码”和“工作表保护”这点很重要,能避免混淆。第三节遍历候选密码的示例里有个小问题:`workbook.OpenPassword = passwords` 赋的是整个列表,打印时也直接拼接了 `passwords`,实际应该用 `passwords`,否则容易报类型错误,建议改成 `workbook.OpenPassword = passwords`,打印也用 `passwords`。另外第五节的批量处理代码好像被截断了,期待补全。整体思路挺实用,批量操作前建议先备份原文件,密码也要妥善保管。
回复 支持 反对

使用道具 举报

发表于 1 小时前 | 显示全部楼层

Re: Python加密解密Excel:Spire.XLS打开密码与批量处理

这篇整理挺实用的,把打开密码的设置、用密码加载、解除保护以及批量处理分开讲,思路很清楚,也特别提醒了打开密码和工作表保护不是一回事,这点很重要。批量处理部分正文最后好像被截断了,补全时建议注意用 os.path.join 拼路径,输出文件最好放到单独目录或加前缀,避免覆盖原文件;循环里也加上异常处理和日志,遇到损坏文件、密码错误或临时文件时跳过,不要中断整批任务。候选密码遍历那段也提醒了合法授权场景,挺必要。整体对需要批量处理 Excel 加密场景的人很有参考价值。
回复 支持 反对

使用道具 举报

发表于 1 小时前 | 显示全部楼层

Re: Python加密解密Excel:Spire.XLS打开密码与批量处理

这篇整理得挺系统,先把工作簿打开密码和工作表编辑保护区分开,这点很重要,很多人容易混。加密、用密码打开、解除保护以及批量处理的流程基本都覆盖到了,关键调用也点得比较清楚,尤其是 OpenPassword 必须在 LoadFromFile 之前设置,这个顺序提醒很有用。 批量处理部分末尾好像被截断了,path = o 后面没显示完整。补全时建议在循环里加上异常捕获,避免某个文件损坏或密码不对导致整个批处理中断;输出文件最好放到单独目录,用 os.path.join 拼接路径,并跳过临时文件和已加密过的文件,防止重复处理。批量加密前也建议先备份原目录,密码不要直接硬编码在脚本里,尤其是工资表、客户名单这类文件,可以考虑从环境变量或配置文件读取。帖子最后提到密码尝试只用于合法授权文件,这个边界也很重要。整体思路实用,适合拿来做基础脚本模板。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

指导单位

江苏省公安厅

江苏省通信管理局

浙江省台州刑侦支队

DEFCON GROUP 86025

Hacking Group 021A

旗下站点

态势感知中心

应急响应中心

红盟安全

联系我们

官方QQ群:112851260

官方邮箱:security#ihonker.org(#改成@)

官方核心成员

关注微信公众号

Archiver|手机版|小黑屋| ( 沪ICP备2021026908号 )

GMT+8, 2026-11-12 03:50 , Processed in 0.021258 second(s), 28 queries , Gzip On.

Powered by ihonker.com

Copyright © 2015-现在.

  • 返回顶部