最近在处理些加密文件,并且需要加密保存,确保数据安全。对于读取习惯csv的我来说很头疼,外加发现网上信息比较散我整理了一下xlsx的加密读取和保存
需安装pywin32
!pip install pywin32
import win32com.client as win32
读取:
def df_from_pswxlsx(filename, password, gl_excel_com, sheetname):
"""
调用格式:
df=df_from_pswxlsx("D:\\amlui\\pivot\\aa.xlsx","Xyl19765225","KET.Application")
参数一:文件路径
参数二:文件密码
参数三:不同配置的Excel-COM 参数,WPS excel用'KET.Application',
MS office Excel文件用'Excel.Application'
参数四:excel工作簿中要处理的sheet名。
return: 解密后输出的pandas格式的df,df就可以参与各种运算了。
於策2020年7月7日调试成功,算法改进后运行速度超级快。
1437条记录从47秒减至2.7秒
3410条记录从105秒减至3.05秒
"""
psw_xlsx = win32.DispatchEx(gl_excel_com) # 这个功能创建新进程,不会打扰用户手动进程
psw_xlsx.DisplayAlerts = 0 # 不显示警告,SaveAS的弹框就不出来了。
wb = psw_xlsx.Workbooks.Open(filename, UpdateLinks=False, ReadOnly=False, Format=None, Password=password,
WriteResPassword=password)
# 获取工作表具体情况
data_lst = list(wb.Worksheets(sheetname).UsedRange()) # 数据存入,"原始数据",2-"借贷求和计数"...数字与表名可以互换
df = pd.DataFrame(data_lst[1:],
columns=data_lst[0]) # data_lst[1:]除了表头(只有一行)以外的所有数据,data_lst[0],原excel表的第一行表头作为列索引。
wb.Close()
psw_xlsx.DisplayAlerts = 1
psw_xlsx.Application.Quit() # 只清掉我自己开启的进程
return df
#调用保存
def pwd_xlsx(old_filename,new_filename,pwd_str,pw_str=''):
xcl = win32.Dispatch("Excel.Application")
# pw_str为打开密码, 若无 访问密码, 则设为 ''
wb = xcl.Workbooks.Open(old_filename, False, False, None, pw_str)
xcl.DisplayAlerts = False
# 保存时可设置访问密码.
wb.SaveAs(new_filename, None, pwd_str, '')
xcl.Quit()
参考:
1.https://blog.csdn.net/lttisky/article/details/108236732?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1.pc_relevant_default&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1.pc_relevant_default&utm_relevant_index=2
2.https://blog.csdn.net/weixin_43097265/article/details/107248676