ARTICLE · 1298283
Excel 工作表保护密码忘了?先别花钱,这 3 个免费办法能救你
上周帮朋友处理一个表:前任同事留下的工资汇总,能打开、能看、能选中,但一到输入就没了反应,菜单栏灰着一大片。
她第一反应是"密码忘了,得花钱破解吧",还问我大概多少钱。
我说先别急,你八成连"是哪种密码"都没分清。这种情况,大概率一分钱不用花。
一、先分清:你遇到的是三种"密码"里的哪一种
Excel 的"密码"是个被严重混淆的概念。日常说"表格有密码",实际可能是三件完全不同的事:
| 打开密码 | ||
| 工作表保护 | ||
| 工作簿结构保护 |
这三者的技术层级差着数量级:
打开密码是把整个文件加密成一堆乱码;工作表保护只是在文件里插了一个"禁止修改"的标记位。正文内容始终是明文。
所以后两种根本不需要知道原密码——你要做的不是"破解",而是把这个标记删掉。
下面三个办法,全是免费的。
二、办法一:改后缀删标记(最通用,成功率最高)
这是我最常用的方法,原理后面会讲,先说操作。
步骤
第 0 步:先复制一份备份。
这一步不是客套。后面要手动改文件内部结构,改错一个字符就可能让文件彻底打不开。先复制,再动手。
第 1 步:把 .xlsx 改成 .zip
在文件上右键 → 重命名,把 工资表.xlsx 改成 工资表.zip。
系统如果提示"改变扩展名可能导致文件不可用",点"是"。
为什么可以这么改?因为 xlsx 本质就是一个 zip 压缩包,里面装着若干 xml 文件。改后缀只是让压缩软件认得它。
第 2 步:用压缩软件打开它
双击这个 zip,或者右键用 WinRAR / 7-Zip / Bandizip 打开。不要解压,直接在里面浏览。
第 3 步:找到对应的工作表文件
依次进入:
xl → worksheets → sheet1.xml、sheet2.xml、sheet3.xml …哪个是你被保护的那张表?sheet1 通常是第一个标签页,sheet2 是第二个,以此类推。表多的话,就逐个试。
第 4 步:用记事本打开,找到 sheetProtection 标签
右键这个 xml → 打开方式 → 记事本(推荐用 Notepad++ 或 VS Code,方便查找)。
按 Ctrl+F 搜 sheetProtection,你会看到类似这样一段:
<sheetProtection algorithmName="SHA-512" hashValue="..." saltValue="..." spinCount="100000" sheet="1" objects="1" scenarios="1"/>第 5 步:把整个标签删掉
从 <sheetProtection 一直选到 />,整段删除,一个字符都不留。
第 6 步:保存,改回后缀,打开
关掉记事本保存 → 压缩软件可能会问"是否更新压缩包内的文件",选是 → 把 .zip 改回 .xlsx → 打开。
保护应该已经没了。
几个容易翻车的点
- 必须让压缩软件"更新"而不是"解压后重新打包"
。有些软件会提示"文件已被修改,是否更新压缩包",一定要选是。如果你是解压出来改的,重新压缩时必须保持目录结构不变。 - 搜不到
sheetProtection说明你打开的不是被保护的那张表,换下一个 sheet 文件。 - 改完打不开,说明改坏了
。用第 0 步的备份重来。 - 文件是
.xls(老格式)不行。老格式不是 zip 结构,这个方法只对 .xlsx有效。
三、办法二:VBA 一行代码解决(适合表多的情况)
如果工作簿里有十几个工作表,逐个改 xml 太痛苦。用宏一次搞定。
操作:
打开文件(能打开就行,工作表保护不影响打开) 按 Alt + F11打开 VBA 编辑器菜单栏 → 插入 → 模块 把下面的代码粘进去:
Sub 解除工作表保护() Dim ws As Worksheet For Each ws In ActiveWorkbook.Worksheets On Error Resume Next ws.Unprotect On Error GoTo 0 Next ws MsgBox "处理完成" End Sub光标放在代码里,按 F5运行
跑完会弹一个"处理完成"。回到 Excel,保护应该没了。
说明:ws.Unprotect 后面可以跟密码参数,比如 ws.Unprotect "123456",但那需要你知道密码。不填参数时,它对没有设密码或密码为空的保护有效;如果设了密码,这个方法会静默失败(被 On Error 吞掉了),不会报错但也不生效。
所以这个办法的成功率取决于当年设保护的人有没有真的填密码——很多人只是勾了"保护工作表"就点了确定,密码框是空的。这种情况一定能解开。
如果工作簿层面还有结构保护(不能增删工作表),再加一段:
Sub 解除工作簿保护() ActiveWorkbook.Unprotect End Sub四、办法三:复制到新表 / 用 Query 绕过(不动原文件)
这两个办法的思路是"绕开"而不是"解除",适合不想改动原文件的情况。
3.1 复制到新工作簿
新建一个空白 Excel → 回到受保护的表 → 全选内容(Ctrl+A)→ 复制 → 粘贴到新表。
原理:保护标记是挂在"工作表"这个对象上的,复制内容到新对象时,标记不会被带过去。
局限:只带走数据,公式可能变值、格式可能丢、图表和透视表可能失效。适合"我只要数据"的场景。
3.2 用 Microsoft Query 只读数据
这个方法更冷门,但在某些情况下有效:
数据 → 获取数据 → 自其它来源 → 来自 Microsoft Query → 选择 Excel Files → 选中那个被保护的文件 → 弹出密码提示时直接点"确定"跳过 → 选择工作表 → 把数据导入原理:Query 走的是数据读取通道,不经过工作表的编辑保护检查。
局限:只能读到数据,公式结果会是值;不是所有版本都有效;导入后需要自己重新排版。
五、为什么这些办法能生效?(原理决定边界)
理解了原理,你就知道什么时候该放弃这些办法。
.xlsx 文件解开后是个这样的结构:
工资表.xlsx ├── [Content_Types].xml ├── xl/ │ ├── workbook.xml ← 工作簿结构(有没有结构保护在这) │ ├── worksheets/ │ │ ├── sheet1.xml ← 工作表内容 + sheetProtection 标记 │ │ └── sheet2.xml │ └── sharedStrings.xml └── _rels/关键在于:sheetProtection 只是一个 xml 标签,Excel 打开文件时读到它,就把界面上的编辑按钮禁用了。
它不加密任何数据。你删掉这个标签,Excel 读不到指令,自然就不禁用按钮了——数据一个字节都没动。
这也解释了三条边界:
| 打开密码 | ||
老格式 .xls |
最后一行是个很好的自检方法:如果你把文件改成 .zip 后能正常打开看到 xl 文件夹,说明文件根本没加密,你的问题一定能用上面的办法解决。
如果改完之后打不开、报错、或者看到一堆看不懂的二进制文件(比如 EncryptionInfo、EncryptedPackage),那才是真加密。
六、真遇到打开密码,怎么办
到这一步,免费办法全部失效。因为 AES 加密后的文件,除了把密码试出来,没有第二条路。
这时候的选择其实只有三个:
① 先花十分钟回忆。 很多人栽在这一步就急着花钱。翻备忘录、翻聊天记录、试常用密码加年份的排列组合,命中率比想象中高。
② 找没加密的旧版本。 邮件附件、U 盘、云盘、微信传输记录里,经常躺着一份加密前的副本。这是最省事的一条路,也最容易被忽略。
③ 走密码恢复。 前两条都空了,就只剩计算。我自己用的是文档密码恢复大师这个站,它把 Word / Excel / PPT / PDF 和压缩包分开做,Excel 这块支持先提取哈希再算,不用反复上传原文件。具体怎么选模式、大概要多久,取决于你的密码复杂度和文件版本——这部分我另开一篇讲。
一句实在话:如果你这个表是别人给你的、密码是对方设的随机串,那就别抱希望了。这不是工具不行,是数学上真的算不完。这种情况下更务实的是找对方要密码,或者从别处找未加密的数据源。
七、最后三条建议
- 先判断类型,再决定花不花钱。
打开文件试一下——要输密码吗?能选中文字吗?这两个动作就能把三种情况分开。 - 动手前一定备份。
改 xml 是高危操作,别在唯一的文件上试。 - 保护 ≠ 加密。
工作表保护防的是"手滑改错",防不住任何人;真正要保密,必须设打开密码。反过来,如果你只是不想让别人乱改,设工作表保护就够了,比设打开密码方便得多,也不会把自己锁在外面。
本文操作步骤在 Excel 2016 / 2019 / Microsoft 365 上验证;.xls 老格式不适用文中 xml 方法。文中涉及的服务信息为页面当期标价,具体以官方页面为准。
本文含商业推广内容。相关工具可在 mima8.cn 找到。















































































