工资表、客户名单和财务报表等 Excel 文件通常包含企业的敏感数据。如果需要通过邮件或网盘分享,最好先设置打开密码,避免未经授权的人员查看文件内容。
使用 Spire.XLS for Python,可以通过简单的 API 为 Excel 工作簿设置打开密码,也可以在提供正确密码后解除已有的密码保护。本文将介绍如何使用 Python 加密和解密 Excel 文档,并演示密码验证和批量处理的方法。
为什么要加密 Excel 文档?
Excel 加密主要用于限制文件访问,常见用途包括:
- 保护敏感数据: 设置打开密码后,用户必须输入正确的密码才能查看工作簿内容。
- 降低文件流转风险: 对通过邮件、网盘等渠道共享的敏感文件进行加密,减少文件误发或被未经授权人员访问的风险。
- 简化文档管理: 在自动化处理流程中使用代码批量加密或解密文件,比逐个通过 Excel 界面设置密码更加方便。
需要注意,本文介绍的加密方式主要针对工作簿的打开密码,与限制工作表编辑、保护单元格等功能不同。
环境准备
本文使用 Spire.XLS for Python 实现 Excel 文档的密码加密与解密,无需依赖本地安装的 Microsoft Excel。
首先,打开终端或命令提示符,执行以下命令安装:
bash
pip install Spire.XLS
安装完成后,在 Python 脚本中导入相关模块:
python
from spire.xls import *
from spire.xls.common import *
方法一:为 Excel 文档设置打开密码
如果希望限制其他人打开 Excel 文件,可以在加载工作簿后调用 Protect(password) 设置密码。
下面的示例使用密码 eiceblue 保护一个 Excel 工作簿,并将加密后的文件另存为新文件:
python
from spire.xls import *
from spire.xls.common import *
inputFile = "EncryptWorkbook.xlsx"
outputFile = "EncryptWorkbook_out.xlsx"
workbook = Workbook()
workbook.LoadFromFile(inputFile)
# 为工作簿设置打开密码
workbook.Protect("eiceblue")
workbook.SaveToFile(outputFile, ExcelVersion.Version2010)
workbook.Dispose()

这里的关键代码是 workbook.Protect("eiceblue"),用于为工作簿设置打开密码。设置完成后,还需要调用 SaveToFile() 将修改保存到文件中。
生成的 EncryptWorkbook_out.xlsx 在 Excel 中打开时,会要求输入密码。只有提供正确的密码,才能查看工作簿内容。
方法二:使用密码打开已加密的 Excel 文档
如果需要读取或修改已经加密的 Excel 文件,首先要使用正确的密码打开工作簿。
Spire.XLS 提供了 OpenPassword 属性,可以在调用 LoadFromFile() 之前设置打开密码。下面的示例通过遍历候选密码,尝试打开指定文件,并使用异常捕获判断密码是否正确:
python
from spire.xls import *
from spire.xls.common import *
inputFile = "EncryptedFile.xlsx"
passwords = ["password1", "password2", "password3", "1234"]
i = 0
while i < len(passwords):
try:
workbook = Workbook()
# 设置打开密码
workbook.OpenPassword = passwords[i]
# 加载加密文档
workbook.LoadFromFile(inputFile)
print("密码 = " + passwords[i] + " 正确,文件已成功打开!")
workbook.Dispose()
except SpireException as ex:
print("密码 = " + passwords[i] + " 不正确")
i += 1
这里需要注意,必须先设置 OpenPassword,再调用 LoadFromFile() 。如果密码不正确,加载文件时可能会抛出 SpireException,因此可以使用 try/except 捕获异常,避免程序直接中断。
这种方式适合在已知候选密码的情况下验证密码是否正确。实际使用时,应确保这些密码来自合法授权的记录,不要将密码尝试用于未经授权的文件。
方法三:解除 Excel 文档的密码保护
如果需要对已加密的 Excel 文件进行后续处理,或者希望移除打开密码,可以在使用正确密码加载工作簿后,调用 UnProtect() 解除密码保护。
下面的示例会先检查文件是否受到密码保护,再尝试使用原密码打开并解除保护:
python
from spire.xls import *
from spire.xls.common import *
inputFile = "DecryptWorkbook.xlsx"
outputFile = "DecryptWorkbook_out.xlsx"
# 判断文档是否受密码保护
isProtected = Workbook.IsPasswordProtected(inputFile)
if isProtected:
workbook = Workbook()
# 使用原密码打开工作簿
workbook.OpenPassword = "eiceblue"
workbook.LoadFromFile(inputFile)
# 解除密码保护
workbook.UnProtect()
workbook.SaveToFile(outputFile, ExcelVersion.Version2013)
workbook.Dispose()
print("已成功解除密码保护。")
else:
print("该文件未加密,无需解密。")
这里通过 Workbook.IsPasswordProtected() 判断文件是否设置了密码保护。该方法直接接收文件路径,并返回布尔值,可以作为解密前的检查步骤。
如果文件已经加密,代码会先设置正确的 OpenPassword,再加载工作簿。成功打开后,调用 UnProtect() 移除密码保护,最后将结果保存为新文件。
需要注意,解除密码保护的前提是能够使用正确的密码打开工作簿。调用 UnProtect() 后,还需要通过 SaveToFile() 保存修改,生成的文件才会解除原有的打开密码。
方法四:批量加密整个文件夹中的 Excel 文档
如果需要处理的 Excel 文件比较多,逐个加载和设置密码会比较耗时。可以使用 Python 的 os.walk() 遍历指定目录,将加密操作放入循环中,实现批量处理。
下面的示例会遍历 excel_files 文件夹,为其中的 .xlsx 和 .xls 文件设置统一的打开密码,并在原文件名前添加 enc_ 前缀保存结果:
python
import os
from spire.xls import *
from spire.xls.common import *
folder = "excel_files"
password = "eiceblue"
for root, dirs, files in os.walk(folder):
for file in files:
if file.lower().endswith((".xlsx", ".xls")):
path = os.path.join(root, file)
workbook = Workbook()
workbook.LoadFromFile(path)
# 为工作簿设置打开密码
workbook.Protect(password)
out = os.path.join(root, "enc_" + file)
workbook.SaveToFile(out, ExcelVersion.Version2010)
workbook.Dispose()
print("已加密:" + file)
这段代码主要通过两层循环遍历指定目录及其子目录,筛选出 Excel 文件后,依次执行加载、加密和保存操作。
批量处理时,需要注意及时调用 Dispose() 释放每个 Workbook 对象,避免大量文件处理过程中持续占用内存和文件资源。
如果需要批量解密,也可以采用类似的循环结构:先为每个工作簿设置正确的 OpenPassword,加载文件后调用 UnProtect(),最后保存处理结果。
实用技巧与注意事项
使用 Python 加密或解密 Excel 文档时,还需要留意以下几点:
- 妥善管理密码。 加密时设置的打开密码,就是后续加载文件时需要提供的密码。实际项目中建议将密码存储在安全的配置或密钥管理服务中,避免直接写在脚本里。
- 提前备份原始文件。 加密和解密都会改变工作簿的密码保护状态。建议将处理结果另存为新文件,保留原始文件以便后续检查或重新处理。
- 及时释放资源。 每个工作簿处理完成后都应调用
Dispose(),尤其是在批量处理多个文件时,避免资源持续占用。 - 合理处理密码错误。 可以使用
try/except SpireException捕获加载文件时的异常,避免单个文件密码不正确导致整个批处理任务中断。 - 区分工作簿加密与工作表保护。 本文介绍的是设置工作簿打开密码,并不等同于限制用户修改工作表结构或编辑特定单元格。实际使用时需要根据保护目标选择对应功能。
总结
使用 Spire.XLS for Python 可以方便地为 Excel 工作簿设置打开密码,也可以在提供正确密码后解除已有的密码保护。如果需要处理加密文件,可以先设置打开密码,再加载工作簿;如果需要批量处理多个文件,则可以结合目录遍历和密码状态检查,自动完成加密或解密操作。将这些方法应用到日常文档处理流程中,可以减少手动设置密码的工作量,也让敏感 Excel 文件的管理更加高效。