广为认知的方法是,运行一段猜测密码的VBA(https://uknowit.uwgb.edu/page.php?id=28850),几十秒就可以找到代替密码,因为密码Hash很短所以密码有多个。但是Excel2013里密码Hash很长所以密码几乎是唯一的,依靠这个VBA肯定找不到密码。
注意,现在说的不是那种一打开就要输入密码的excel文件,那个是文件整体加密的,必须暴力破解出密码的。现在说的是文件能打开,只是里面的有的部分不能修改。
我虽然手头没有Excel 2013,但是推测,这个worksheet保护,其实没有对文件内容加密,仅仅是做了些标记,说不让修改某些制定的cell而已,应该是去掉了标记就可以自由修改了的。在Office 2010上实验了,的确没问题,只要把文件按照下面的方法修改一下就好了:
把xlsx文件后缀改成zip,解压。 (如果是xls,那就先保存成xlsx格式)
解压后的目录结构大致是:
顶层目录 _res目录 docProps目录 xl目录 [Content_Types].xml ....
在解压后的xl/worksheets目录里,找到sheet1.xml, sheet2.xml...,打开
把里面的<sheetProtect.....>这句给删除
<sheetProtection objects="1" password="????" scenarios="1" sheet="1"/>
把顶层目录的东西压缩,但是不包括顶层目录。把压缩有的文件后缀名改成xlsx,这就是可以自由修改的xls文件了。
估计这个方法应该在Excel2013里可以使用的。
这个方法就和去除pdf的复制打印保护的方法差不多,不需要密码,只需要用qpdf工具修改一下就好了。
qpdf --decrypt old_pdf_file new_pdf_file
来源:oschina
链接:https://my.oschina.net/u/2253129/blog/504904