Python 利用win32com批量给excel加密

本文实现了批量给excel加密的办法 ,参考的网上的部分代码。运行时候第一个对话框是原始文件所在的位置选择,第二次对话框选择输出文件的位置,同时对加密函数添加一句代码,解决了批量运行报错的问题,pwd_xlsx里面加了wb.Close()这一句,有效解决问题。

本文第二个特点,引用了之前见过一位大侠,用汉语写的一个获取文件路径的函数。

import os, sys
import win32com.client
import time
import hashlib
import tkinter as tk    #调用GUI图形模块

from tkinter import filedialog


def pwd_xlsx(old_filename,new_filename,pwd_str,pw_str=''):
    xcl = win32com.client.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, '')
    time.sleep(0)
    wb.Close()
    xcl.Quit()



    
def read_path(path):
    dirs = os.listdir(path)
    return dirs

def 方法_获取文件路径(data_dir):
    文件集 = os.listdir(data_dir)
    filename=[]
    #return 文件集
    for 文件名 in 文件集:
            文件名分解 = 文件名.split('.')
            #print(文件名分解)
            if 文件名分解[-1] == 'xlsx' or 文件名分解[-1] == 'xls':
                excel文件路径 = (data_dir +  文件名)                
                filename.append(excel文件路径)
                #print(excel文件路径)
    #print(filename)
    return filename



def main():
    
    root = tk.Tk()
    root.withdraw()
    data_dir = filedialog.askdirectory(title='请选择excel所在文件夹')+'/'  
    # 将源文件路径里面的文件转换成列表file_list
    file_list = 方法_获取文件路径(data_dir)
 
    
    dirs='临时文件'
    if not os.path.exists(dirs):
        os.makedirs(dirs)  #输出文件夹
    #global result_dir
    result_dir =dirs+'/' 
    


    # 源文件路径
    source = data_dir
 
    # 目标文件路径
    ob =filedialog.askdirectory(title='请选择输出另存的文件夹')+'/'
    
    
    a = 0       # 列表索引csv文件名称放进j_list列表中,索引0即为第一个csv文件名称
    j_list = read_path(source)       # 文件夹中所有的csv文件名称提取出来按顺序放进j_list列表中
    #print("---->", read_path(source))       # read_path(source) 本身就是列表
    #print("read_path(source)类型:", type(read_path(source)))
    # 建立循环对于每个文件调用excel_to_csv()
    for it in file_list:
        print(it+'开始加密')
        j = j_list[a]    # 按照索引逐条将csv文件名称赋值给变量j
        #print(j)
        # 给目标文件新建一些名字列表
        new_filename=ob + '\\' + str(j)
        pwd_str = '654321'#新密码自定义
        aa = it
        #print(aa.replace("/", "\\"))
        bb =ob+str(j)
        #print(bb.replace("/", "\\"))
        path1=aa.replace("/", "\\")
        path2=bb.replace("/", "\\")
        #Remove_password_xlsx(aa.replace("/", "\\"), pw_str)
        try:
            pwd_xlsx(path1, path2,pwd_str)
            print(it+'加密完成')
            time.sleep(1)
        except Exception as e:
            print(it+'加密失败,请手动设置')
            
            pass
        
        a = a+1
    
    
 
if __name__ == '__main__':
    main()
    
    

    

你可能感兴趣的:(表格处理,python制作生活小工具,python,excel)