看完本篇文章,你可能学会了怎么解除工作表密码保护,但是,解决有些问题,其实没这么复杂。
数据模板的哪些事
一、问题的来由
在卫生局上班的一个朋友传过来一个Excel表格,说这个表格有问题,他怎么都搞不定,让我帮他修改下。我便欣然答应,让微信发过来。
实名制数据采集模板
收到发过来的表格,我打开一看,这明显就是某个管理系统的数据录入模板,做数据分析的人都知道,原始数据的格式是非常重要的,常常会因为一个数据格式的错误,导致导入系统后结果发生很大的偏差。因此,为了防止录入人员意外修改数据模板的固有格式,通常系统都会对这些“模板式”的工作表进行保护处理。
有问题的录入数据表
显然,我朋友录入的这个数据表因为操作不当(可能是进行了某些复制、粘贴等不规范操作)录入的数据格式比较混乱,单元格的字体大小、加粗属性、字体颜色不一致;对齐方式不一致;日期格式也不一致。他想修改成统一的单元格格式,因为这个数据模板设置了工作表保护的原因,他当然修改不了!
功能区灰色,无法编辑
撤消工作表保护,需要密码
二、走上了破解之路
显然,要将混乱的数据格式统一修改,就必须要编辑,但是目前工作表被保护了,撤销工作表保护又没有密码,此时唯一的办法我就想到了破解清除掉工作表保护密码,才能完成朋友交给的任务。
说干就干,目前流行两种清除工作表保护密码的方法:(切记不可用于不正当操作)
第1种,利用VBA清除(简单、高效)
操作方法:实践环节能用图片表达的就尽量不用文字,我直接上图:
方法1:利用VBA代码清除工作表保护操作图
VBA清除密码操作成功,可以编辑
附:清除工作表保护密码VBA代码:
PublicSub工作表保护密码破解()
ConstHUANHANGAsString=vbNewLine&vbNewLine
ConstMINGCHENAsString="清除工作表保护密码"
ConstJINGGAOAsString="该工作簿中的工作表密码保护已全部清除!!"&HUANHANG&"请记得另保存"_
&HUANHANG&"注意:不要用在不当地方,要尊重他人的劳动成果!"
ConstTISHI1AsString="该文件工作表中没有加密"
ConstTISHI2AsString="该文件工作表中没有加密2"
ConstKSPJAsString="解密需花费一定时间,请耐心等候!"&HUANHANG&"按确定开始清除!"
ConstFXMM1AsString="密码重新组合为:"&HUANHANG&"$$"&HUANHANG&_
"如果该文件工作表有不同密码,将搜索下一组密码并修改清除"
ConstFXMM2AsString="密码重新组合为:"&HUANHANG&"$$"&HUANHANG&_
"如果该文件工作表有不同密码,将搜索下一组密码并解除"
ConstMSGONLYONEAsString="确保为唯一的?"
Dimw1AsWorksheet,w2AsWorksheet
DimiAsInteger,jAsInteger,kAsInteger,lAsInteger
DimmAsInteger,nAsInteger,i1AsInteger,i2AsInteger
Dimi3AsInteger,i4AsInteger,i5AsInteger,i6AsInteger
DimPWord1AsString
DimShTagAsBoolean,WinTagAsBoolean
Application.ScreenUpdating=False
WithActiveWorkbook
WinTag=.ProtectStructureOr.ProtectWindows
EndWith
ShTag=False
ForEachw1InWorksheets
ShTag=ShTagOrw1.ProtectContents
Nextw1
IfNotShTagAndNotWinTagThen
MsgBoxTISHI1,vbInformation,MINGCHEN
ExitSub
EndIf
MsgBoxKSPJ,vbInformation,MINGCHEN
IfNotWinTagThen
Else
OnErrorResumeNext
Do'dummydoloop
Fori=65To66:Forj=65To66:Fork=65To66
Forl=65To66:Form=65To66:Fori1=65To66
Fori2=65To66:Fori3=65To66:Fori4=65To66
Fori5=65To66:Fori6=65To66:Forn=32To126
WithActiveWorkbook
.UnprotectChr(i)&Chr(j)&Chr(k)&_
Chr(l)&Chr(m)&Chr(i1)&Chr(i2)&_
Chr(i3)&Chr(i4)&Chr(i5)&Chr(i6)&Chr(n)
If.ProtectStructure=FalseAnd_
.ProtectWindows=FalseThen
PWord1=Chr(i)&Chr(j)&Chr(k)&Chr(l)&_
Chr(m)&Chr(i1)&Chr(i2)&Chr(i3)&_
Chr(i4)&Chr(i5)&Chr(i6)&Chr(n)
MsgBoxApplication.Substitute(FXMM1,_
"$$",PWord1),vbInformation,MINGCHEN
ExitDo'Bypassallfor...nexts
EndIf
EndWith
Next:Next:Next:Next:Next:Next
Next:Next:Next:Next:Next:Next
LoopUntilTrue
OnErrorGoTo0
EndIf
IfWinTagAndNotShTagThen
MsgBoxMSGONLYONE,vbInformation,MINGCHEN
ExitSub
EndIf
OnErrorResumeNext
ForEachw1InWorksheets
'AttemptclearancewithPWord1
w1.UnprotectPWord1
Nextw1
OnErrorGoTo0
ShTag=False
ForEachw1InWorksheets
'ChecksforallclearShTagtriggeredto1ifnot.
ShTag=ShTagOrw1.ProtectContents
Nextw1
IfShTagThen
ForEachw1InWorksheets
Withw1
If.ProtectContentsThen
OnErrorResumeNext
Do'Dummydoloop
Fori=65To66:Forj=65To66:Fork=65To66
Forl=65To66:Form=65To66:Fori1=65To66
Fori2=65To66:Fori3=65To66:Fori4=65To66
Fori5=65To66:Fori6=65To66:Forn=32To126
.UnprotectChr(i)&Chr(j)&Chr(k)&_
Chr(l)&Chr(m)&Chr(i1)&Chr(i2)&Chr(i3)&_
Chr(i4)&Chr(i5)&Chr(i6)&Chr(n)
IfNot.ProtectContentsThen
PWord1=Chr(i)&Chr(j)&Chr(k)&Chr(l)&_
Chr(m)&Chr(i1)&Chr(i2)&Chr(i3)&_
Chr(i4)&Chr(i5)&Chr(i6)&Chr(n)
MsgBoxApplication.Substitute(FXMM2,_
"$$",PWord1),vbInformation,MINGCHEN
'leveragefindingPwordbytryingonothersheets
ForEachw2InWorksheets
w2.UnprotectPWord1
Nextw2
ExitDo'Bypassallfor...nexts
EndIf
Next:Next:Next:Next:Next:Next
Next:Next:Next:Next:Next:Next
LoopUntilTrue
OnErrorGoTo0
EndIf
EndWith
Nextw1
EndIf
MsgBoxJINGGAO,vbInformation,MINGCHEN
EndSub
以上是清除工作表保护代码,直接复制粘贴到sub模块运行即可!
第2种,利用RAR软件清除(不一定能成功)
操作方法:实践环节,依然直接上操作图:
方法2:利用RAR软件清除工作表密码保护
- 将带有密码保护的excel表格文件扩展名由.xlsx改为.rar压缩文件格式。
- 打开压缩包,依次进入“xl”→“worksheets”文件夹,在这里找到你需要清除密码的工作表(里面可能有几个sheet,找到你要处理的sheet,如果不知道是哪个sheet,可通过vba编辑器的工程属性查看)本案例信息表对应的是“sheet4.xlm”,点击对应的sheet.xlm,然后右键用记事本打开,找到含有“<sheetProtection……/>”文字的这段代码后,将其删除并保存当前记事本文件。
通过vba工程属性查看对应的sheet表
3.保存修改后的“sheet4.xml”,回到压缩包软件,点击确定修改更新到压缩包,再将该文件的扩展名.rar改为原后缀名.xlsx。
4.此时,再打开这个Excel表格后工作表保护密码已经清除了,是不是很有成就感呢?
三、其实,费了半天劲,这个问题没这么复杂!
虽然通过暴力清除工作表密码保护的方法,实现了对模板数据表的编辑。
但是,我们都错了!!!处理这样的问题,用不着这么复杂。
因为这种模板式的表格,被加密保护本来就是系统为了防止录入人员意外修改格式而设置的。它对表格中的一些字段格式都是有固定要求和说明的,并且数据行都已经设定好了单元格格式,录入人员只需要录入数据值,不需要修改单元格格式。
如果在后期录入的数据格式出现了参差不齐的情况,根本不用这么麻烦去破解什么工作表密码。此时,你只需要一个Ctrl+D快捷键就可以轻松解决。Ctrl+D的功能是向下复制填充,被加密保护了的工作表,单元格格式是没法修改的,但利用Ctrl+D可以将模板数据表中第一行的原始格式向下复制到数据录入区域,然后再清除复制的数据,重新粘贴需要录入数据的值,这样操作就达到了恢复模板数据表的统一格式。
恢复Excel数据模板格式的正确姿势图
显然,对于朋友的这个问题,我们费尽周折破解密码,是把简单的问题复杂化了。
总结:
今天分享这样的一个案例,除了教会大家如何清除工作表密码保护的两种方法外,也给遇到了类似问题的朋友们提个醒,小心避坑,不要把简单的问题复杂化!记住:任何事情都肯定有更简易的方法,任何问题都肯定有更简单的答案,越简单就越容易找到核心,越容易达致成功。