Python对Excel的常规操作 之 读取带密码的文件,解除Sheet密码 您所在的位置:网站首页 有密码的excel怎么解除密码 Python对Excel的常规操作 之 读取带密码的文件,解除Sheet密码

Python对Excel的常规操作 之 读取带密码的文件,解除Sheet密码

2024-07-06 09:37| 来源: 网络整理| 查看: 265

Python对Excel的常规操作 之 读取带密码的文件,解除Sheet密码 一些废话读取加密的Excel解除文件中Sheet的密码写在后面

一些废话

最近一直在给部门写一个参数校验的小程序。因为参数的设置问题,到达客户的产品出现通信故障,不能正常使用的情况屡见不鲜。这直接导致了公司的形象受损,而且客户可能会怀疑产品性能是否可靠。另外,检验员也被多次罚款,工作过程压力也很大,害怕再次出错。为解燃眉之急部门决定做一个自动检验的程序,操作员更改完毕后,由程序进行double check。因此前面的树莓派学习暂且搁置,后期会更新的,因为还有一个质量改进可能会用到树莓派。

软件的编写由我负责,后期由我和其他几位工程师进行模板文件的维护。当前编写大体已经完成,目前进入测试阶段。在编写过程中学习了很多,今天继续分享一下对Excel的操作。

待检验的文件是一个TXT文件,包含产品的所有配置信息,每行一个数据,代表不同的参数,参数个数199个或206个不等。软件的逻辑是读取TXT文件中某行数据,识别出该产品的要求。模板存放在一个Excel文件中,不同模板存放在不同的sheet,sheet名为模板名。每个模板中存放着TXT某一行的标准值,检验时,将对应模板读入软件,再与TXT文件进行比对。我应该没有说清楚😪,但这不重要。以后我会记录一些这个过程中学到的有用的东西。

马上我们要进入正题了······

读取加密的Excel

敲黑板: excel.Workbooks.Open(filename, UpdateLinks=False, ReadOnly=False, Format=None, Password=password)

读取之后就可以正常读取和写入文件了,读写具体操作参见 Python对Excel的常规操作 之 读取,写入(保留原格式写入).

from win32com.client import DispatchEx def read_excel_password(filename, password): excel = DispatchEx("Excel.Application") # 启动excel excel.Visible = False # 去掉可视化 demo = excel.Workbooks.Open(filename, UpdateLinks=False, ReadOnly=False, Format=None, Password=password) # 打开文件并将密码传入 xlSheet_1 = demo.Worksheets(1) # 打开第一个sheet print(xlSheet_1.Cells(1, 1).Value) # 打印第一个sheet的第一行一列数据 demo.Close(True) # 关闭文件 if __name__ == '__main__': filename = "D:\LEON\Sevenstar\Files\Demo.xlsx" password = "demo" read_excel_password(filename, password) 解除文件中Sheet的密码

领导要求,模板的更新由工程师完成,检验员可以查看到模板,但不允许进行修改。这就要求每个sheet需要设置一个密码。期初我是使用xlrd进行Excel的读取的,因为xlrd的读取速度比win32com要快。现在要给每个sheet加一个密码,xlrd是不支持读取加密码的文件的,写到这里我质疑了一下自己。刚试了一下xlrd确实不支持,但是xlrd支持读取Sheet加密的文件,所以我做了一些没有意义的工作😞。 复盘:我以为xlrd不能读取加密Sheet,实际上可以读取,因为加密的Sheet是可以读取的,只是不能写入。我想先用Win32com解除Sheet密码,再用xlrd读取,耍小聪明失败😌

不过这个功能确实可以批量解除Sheet的密码(密码已知)

import openpyxl from win32com.client import DispatchEx import os def Unlock_Sheet_password(filename, password): excel = DispatchEx("Excel.Application") # 启动excel excel.Visible = False # 去掉可视化 demo = excel.Workbooks.Open(filename) for i in range(1, len(sheet_name) + 1, 1): xlSheet_1 = demo.Worksheets(i) # 打开第1个表 xlSheet_1.Unprotect(password) # 去除Sheet的密码 demo.SaveAs("D:\\LEON\\Sevenstar\\Files\\Template_TEMP.xlsx") # 另存为 xlSheet_1 = demo.Worksheets(1) # 打开第一个sheet print(xlSheet_1.Cells(1, 1).Value) # 打印第一个sheet的第一行一列数据 demo.Close(True) # 关闭文件 os.remove("D:\\LEON\\Sevenstar\\Files\\Template_TEMP.xlsx") # 删除临时解锁的文件 if __name__ == '__main__': filename = "D:\LEON\Sevenstar\Files\Demo.xlsx" password = "demo" template_excel = openpyxl.load_workbook(filename) # 获取文件中的Sheet名列表 sheet_name = template_excel.sheetnames # 存于sheet_name中 Unlock_Sheet_password(filename, password) 写在后面

关于解除文件本身的密码,目前还没有查到有效的方法。

本次记录让我查到了自己的错误,绕了弯路,我会继续优化,后面我也会继续更新。希望早日完成软件,用到实际检验中,真正提高产品质量。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有