首页 > 编程语言 >python win32com加密表格文件;加密目录下的所有表格文件

python win32com加密表格文件;加密目录下的所有表格文件

时间:2023-10-25 12:11:13浏览次数:34  
标签:文件 加密 表格 10 text pwd file path

需求背景:写一个工具,对指定路径下的所有Excel文件进行加密,设置打开密码和编辑密码

实现思路:需要用python遍历指定目录下的所有文件,判断是否是EXCEl文件,还要判断文件是否原本就有密码,加密完成后将结果写入到文本文件

代码:

import os
import tkinter
import tkinter.filedialog
from tkinter import Tk, LabelFrame, Label, Entry, Button, END, messagebox
import win32com.client
import win32com
import pandas as pd
import xlrd

root = Tk()
root.title("python小工具")
root.wm_geometry('500x280+500+250')
root.resizable(False, False)

l_frame_1 = LabelFrame(root, text="表格批量加密", padx=10, pady=10)
l_frame_1.pack(pady=20)

label_1 = Label(l_frame_1, text="请选择待加密表格文件所在路径:")
text_box = Entry(l_frame_1, bd=2)

label_1.grid(row=0, column=0, padx=5, pady=10)
text_box.grid(row=0, column=1, padx=5, pady=10)


def btn_view_click():
    text_box.delete(0, END)
    text_box.insert(0, tkinter.filedialog.askdirectory())


btn_view = Button(l_frame_1, text='浏览...', command=btn_view_click)
btn_view.grid(row=0, column=2, padx=5, pady=10)

label_open_pwd = Label(l_frame_1, text="设置文档打开密码:")
label_edit_pwd = Label(l_frame_1, text='设置文档编辑密码:')
entry_open_pwd = Entry(l_frame_1, bd=2)
entry_edit_pwd = Entry(l_frame_1, bd=2)
label_open_pwd.grid(row=1, column=0, padx=10, pady=10)
label_edit_pwd.grid(row=2, column=0, padx=10, pady=10)
entry_open_pwd.grid(row=1, column=1, padx=10, pady=10)
entry_edit_pwd.grid(row=2, column=1, padx=0, pady=10)


def btn_encrypt_click():
    file_path = text_box.get()
    open_pwd = entry_open_pwd.get()
    edit_pwd = entry_edit_pwd.get()
    success_list = []
    failed_list = []

    if file_path != "":
        # 遍历路径下的所有文件、文件夹
        for dir_path, dir_names, file_names in os.walk(file_path):
            for filename in file_names:
                # 根据文件后缀名判断是否表格文件,并排除~$开头的临时文件
                if (not filename.startswith("~$")) and (filename.endswith(".xls") or filename.endswith(".xlsx")):
                    full_path = os.path.join(dir_path, filename).replace("/", "\\")
                    try:
                        # 先使用pandas读取一遍,有密码的会打不开报错,先排除掉
                        # 此处用win32com来试着打开的话,有密码的文件不会报错,而是弹出密码提示框,所以不能用win32com来判断有没有密码
                        df = pd.read_excel(full_path,sheet_name=0,index_col=0,header=None)
                        try:
                            # pandas能读取说明没密码
                            del df
                            xcl = win32com.client.Dispatch("Excel.Application")
                            xcl.DisplayAlerts = False  # 不显示警告,保存文件时直接覆盖保存,不弹出提示
                            xcl.Visible = False  # 后台运行
                            wb = xcl.Workbooks.Open(full_path)
                            wb.SaveAs(full_path, None, open_pwd, edit_pwd)
                            xcl.Quit()
                            if len(success_list) < 100 :
                                success_list.append(full_path)
                        except Exception as e:
                            if len(failed_list) < 100:
                                failed_list.append(full_path + ";错误原因:" + e)
                    except xlrd.biffh.XLRDError as e: # 文档有密码时报的错
                        if len(failed_list) < 100:
                            failed_list.append(full_path + ";错误原因:文档本身已有密码")

        # 执行完毕后,将执行结果写到文本文件里面
        s = "\n"
        log_file = open('表格加密日志.txt', 'w')
        log_file.write("已成功加密的清单如下:\n")
        log_file.write(s.join(success_list))
        log_file.write("\n")
        log_file.write("加密失败的清单如下:\n")
        if failed_list:
            log_file.write(s.join(failed_list))
        else:
            log_file.write("不存在加密失败的文件")
        messagebox.showinfo('消息', "已处理完成,请查看日志")

    else:
        messagebox.showerror('错误', "请先选择文件路径")


btn_encrypt = Button(l_frame_1, text='确定加密', command=btn_encrypt_click)
btn_encrypt.grid(row=3, column=1, padx=10, pady=10)

root.mainloop()

程序效果:

 

加密日志:

 

标签:文件,加密,表格,10,text,pwd,file,path
From: https://www.cnblogs.com/dige1993/p/17786877.html

相关文章

  • 通过pandas读取xls文件系统提示:no engine?
    大家好,我是皮皮。一、前言前几天在Python最强王者群【wen】问了一个Python自动化办公的问题,一起来看看吧。通过pandas读取xls文件(pd.read_excel)系统提示:noengineforfiletyppexls,请问应该如何处理呢?二、实现过程后来【隔壁......
  • Python判断多个文件夹的文件夹名是否包含“分公司”或“营销中心”怎么处理?(方法二)
    大家好,我是皮皮。一、前言前几天在Python最强王者群【哎呦喂 是豆子~】问了一个Python自动化办公的问题,一起来看看吧。大佬们请问下 判断多个文件夹的文件夹名是否包含“分公司”或“营销中心” 有没有什么简便的办法可以实现呀?二、实现过程这里【东哥】给了两个示例代码,实现......
  • Emqx5 版本 修改默认配置文件
    ##NOTE:##Configsinthisfilemightbeoverriddenby:##1.Environmentvariableswhichstartwith'EMQX_'prefix##2.File$EMQX_NODE__DATA_DIR/configs/cluster-override.conf##3.File$EMQX_NODE__DATA_DIR/configs/local-override.conf####......
  • springboot 整合 gridfs 、webUploader实现大文件分块上传、断点续传、秒传
    主要的pom.xml:<dependency>      <groupId>mysql</groupId>      <artifactId>mysql-connector-java</artifactId>    </dependency><!--mongodb-->    <dependency>      <groupId>org.spri......
  • vue3 elementplus table表格内添加checkbox和行号
    1.仅添加复选框<el-table-columntype="selection"width="55"></el-table-column>2.添加复选框和文字行号在一列<el-table-column><template#header><el-checkboxv-model="selectAll"@change="han......
  • 从每个文件夹中复制20个文件到新的文件夹中
    情况:有个A文件夹,里面有几十个文件夹,每个文件中又有几千中图片,现在想从每个文件夹中提取20个图片作为测试集,复制到B文件夹中,B文件夹中的结构和A相同,B中也是有几十个文件夹,每个文件夹中有20张图片 操作:第一步,在B中创建和A中一样的文件夹lsA|xargs-i-tmakdirB/{}第二......
  • Window 上 VS Code 无法编译Rust 文件的错误
    Window上VSCode无法编译Rust文件的错误error:linker`link.exe`notfound在CMD中运行以下命令1.rustuptoolchaininstallstable-x86_64-pc-windows-gnu2.rustupdefaultstable-x86_64-pc-windows-gnu参考:https://blog.csdn.net/Libigtong/article/details/131823204......
  • java加密解密
    packagecom.pg;importcom.pg.utils.CommonUtils;importcom.sun.org.apache.xerces.internal.impl.dv.util.Base64;importjavax.crypto.BadPaddingException;importjavax.crypto.Cipher;importjavax.crypto.IllegalBlockSizeException;importjavax.crypto.NoSuch......
  • Java文件上传方式
    Java实现文件上传的方式有以下几种:1.通过JavaServlet实现文件上传:在Servlet中,可以通过HttpServletRequest对象的getPart()方法获取文件的Part对象,然后通过Part对象的write()方法将文件写入服务器。2.使用ApacheCommonsFileUpload库:这个库提供了一个简单的API,可以轻松地将文件......
  • 核心数据文件外发审批策略,有必要进行执行吗?
    企业在日常运营中,有很多重要的核心数据,比如研发代码,都是保存在员工电脑上。可想而知,如果这些代码被有意或者无意泄露出去,将对企业的持续运行造成比较大的经济和声誉上的损失,甚至是面临更为严重的监管处罚。根据RSA的一项研究显示,大多数企业都没有严格的文件外发制度,有一半以上的......