需求
实际用途也是奇葩,为避免二次修改作弊,追责明确,单位要求各业务部门银行支付表(只读)模式发给财务,财务仅负责支付,结果部门太多,Excel 版本多到令人发指,甚至还有WPS,很多人不会设置禁止编辑!
用途
加密 Excel 和 WPS 电子表格 . . .
简陋的代码
import os
# import sys
import win32com.client
import PySimpleGUIWx as sg
# base_dir = os.path.dirname(__file__) # 获取当前文件目录
sg.theme('DarkBlue3') # please make your creations colorful
def pwd_xlsx(old_filename,new_filename):
try:
xcl = win32com.client.DispatchEx("Excel.Application")
wb = xcl.Workbooks.Open(old_filename)
xcl.DisplayAlerts = False
for sh in wb.Sheets:
ws = xcl.Worksheets(sh.Name)
ws.Protect('33818121')
wb.SaveAs(new_filename)
xcl.Quit()
except:
window['-OUTPUT-'].update('处理失败,请关闭所有正在编辑的文件后重试!', text_color='red')
else:
window['-OUTPUT-'].update('操作成功,新文件名为' + '「Lock + 源文件名 」!', text_color='green')
layout = [ [sg.Text('Excelockedit ©lala.', text_color='yellow')],
[sg.Text(font = ('Helvetica', 3))],
[sg.Input(), sg.FileBrowse('选择文件')],
[sg.Text('仅支持「xls」和「xlsx」文件锁定', key='-OUTPUT-')],
[sg.Text(font = ('Helvetica', 3))],
[sg.OK('锁定'), sg.Cancel('退出')]]
# 透明度50% alpha_channel=.5
window = sg.Window('Get filename example', layout, no_titlebar=True, grab_anywhere=True)
while True:
event, values = window.read()
print(event, values)
fname = values[0]
if event == sg.WIN_CLOSED or event == '退出':
break
if event == '锁定':
if not fname:
window['-OUTPUT-'].update('请先选择文件再进行操作!', text_color='red')
else:
old_filename = fname
dir_path = os.path.dirname(fname)
new_filename = os.path.join(dir_path, 'Lock' + os.path.basename(fname)) # 获取文件拼接后的路径
pwd_xlsx(old_filename,new_filename)
window.close()
# 若设置文件访问密码请参考以下函数(即先输入密码才能查看内容)
# def pwd_xlsx(old_filename,new_filename,pwd_str,pw_str=''):
# xcl = win32com.client.DispatchEx("Excel.Application")
# # pw_str为打开密码, 若无 访问密码, 则设为 ''
# wb = xcl.Workbooks.Open(old_filename, False, False, None, pw_str)
# # wb = xcl.Workbooks.Open(old_filename)
# xcl.DisplayAlerts = False
# for sh in wb.Sheets:
# ws = xcl.Worksheets(sh.Name)
# ws.Protect('123')
# #print(ws)
# #ws = wb.Worksheets(1)
# #ws.Protect('123')
# # 保存时可设置访问密码.
# wb.SaveAs(new_filename, None, pwd_str, '')
# xcl.Quit()
编译 Win 版本
总不能每台电脑去安装运行环境,于是就编译好了 EXE 版本 , 然后发单位群共享,全民皆大欢喜。
下载地址
诚通网盘(访问密码:1024),有类似需求朋友的去下载吧,全当请我喝杯咖啡了。