PYTHON EXCEL 转档时遇到有密码档案的处理方式

在使用 python 转换 xls 格式到 xlsx 我遇到了下列情况
1.有开启密码保护
2.唯读密码保护
3.有开启密码保护+唯读密吗保护
4.档案含有vba
每当 python 遇到前三项, 都会出现一个视窗等待输入密码
但不见得所有的密码都一样, 或是遇到恶意设定的开启密码保护, 此时需要跳过有开启密码保护的档案,
而唯读密码比较没有关係, 然后还要检查档案内是否含有 vba, 存档时以正确的格式存档

相信版上也有很多大神都能顺利解决这些问题, 但对我们这些入门者却是很困扰, 顺便让我自己记录一下

以下方式可以把每个检测功能写成 def , 这部份我就不多写了, 因为我是使用 win32com , 所以参数请自行参考微软的 win32com 手册

好像 openpyxl 更简单一点

目前我试过的方式如下

"""检测 xls 是否有开启密码保护workbooks.open()文件请参考:[https://learn.microsoft.com/en-us/office/vba/api/excel.workbooks.open](https://learn.microsoft.com/en-us/office/vba/api/excel.workbooks.open)"""import osimport win32com.client#档案路径自请自行修改FILE_NAME = r"D:\xls2xlsx\testFile\开启密码.xls"READ_ONLY = FalseEXCEL_FILE = win32com.client.Dispatch("Excel.Application")try:    WORK_BOOK = EXCEL_FILE.Workbooks.Open(FILE_NAME, False, True, None, "", "", True, None, None, False, False, None, True)    print("档案没有开启密码保护")except:    READ_FILE = True    print("档案有开启密码保护")finally:    #try 结束的动作    WORK_BOOK.Close()    EXCEL_FILE.Quit()
"""检测 xls 是否有唯读密码workbooks.open()文件请参考:[https://learn.microsoft.com/en-us/office/vba/api/excel.workbooks.open](https://learn.microsoft.com/en-us/office/vba/api/excel.workbooks.open)"""import osimport win32com.client#档案路径自请自行修改FILE_NAME = r"D:\xls2xlsx\testFile\唯读密码.xls"READ_ONLY = FalseEXCEL_FILE = win32com.client.Dispatch("Excel.Application")try:    WORK_BOOK = EXCEL_FILE.Workbooks.Open(FILE_NAME, False, False, None, "", "", False, None, None, True, False, None, True)    print("档案没有唯读密码")except:    READ_FILE = True    print("档案有唯读密码")finally:    #try 结束的动作    WORK_BOOK.Close()    EXCEL_FILE.Quit()
"""检测 xls 是否有VBAworkbooks.open()文件请参考:[https://learn.microsoft.com/en-us/office/vba/api/excel.workbooks.open](https://learn.microsoft.com/en-us/office/vba/api/excel.workbooks.open)"""import osimport win32com.client#档案路径自请自行修改FILE_NAME = r"D:\xls2xlsx\testFile\唯读密码.xls"READ_ONLY = FalseIS_VBA = FalseEXCEL_FILE = win32com.client.Dispatch("Excel.Application")WORK_BOOK = EXCEL_FILE.Workbooks.Open(FILE_NAME, False, False, None, "", "", False, None, None, True, False, None, True)IS_VBA = WORK_BOOK.hasVBProjectSEC_VALUE = WORK_BOOK.Application.AutomationSecurityWORK_BOOK.Application.AutomationSecurity = 1    if IS_VBA:    print("另存成 xlsm")else:    print("# 另存成 xlsx")WORK_BOOK.Application.AutomationSecurity = SEC_VALUEWORK_BOOK.Close()EXCEL_FILE.Quit()

关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章