基于python编写的excel表格数据标记的exe文件

news2025/1/17 13:54:06

目录

一、需求:

二、思路:

三、工具

四、设计过程

(一)根据需要导入相关的图形界面库

(二)创建图形窗口

(三)标签设计

(四)方法按钮设计

(五)输入框的设置

(六)创建文本框输出组件

(七)清除输出文本框内容方法

(八)初始化所需数据

(九)数据标记

(十)清除标记

五、转化为exe格式

六、结果


在编写该exe文件的时候,首先需要知道需要那些工具以及思路和需求,这样才能更好的解决整体设计以及调整方案。

一、需求:

1. 选择excel表格文件进行指定字符所在行进行标记

2. 需要指定列的指定字符

3. 指定的excel子表格Sheet名称

4. 标记完成后清除标记(防止上一次的标记未清除影响下一次的判断)

5. 标记内容输入到文本窗口(方便查看标记的内容,不用打开excel表格)

6. 清除文本框的内容,有利于查看内容

二、思路:

1. 首先设计GUI窗口和文本框

2. 设计相应的需求按钮

3. 相应标签与输入框的设计

4. 利用虚拟环境将GUI转化成exe格式

三、工具

整个过程的设计需要python的多种库与转化成exe格式的方法工具,涉及到的如下:

import tkinter
import os     
import xlrd  # 导入读取excel表格的xlrd库
import pandas as pd
from openpyxl import load_workbook          # 导入表格
from openpyxl.styles import PatternFill     # 用于标记
from tkinter import filedialog, dialog       #打开文件

pyinstaller   #打包成exe文件的库

四、设计过程

(一)根据需要导入相关的图形界面库

整个过程我们需要窗口库、读取表格库、导入表格库、标记库、打开文件库

#导入图形窗口界面库
import tkinter
import os
import xlrd  # 导入读取excel表格的xlrd库
import pandas as pd
from openpyxl import load_workbook  # 导入表格
from openpyxl.styles import PatternFill  # 用于标记
from tkinter import filedialog, dialog   #打开文件库

(二)创建图形窗口

在创建图形窗口的过程中需要设计窗口的名字以及长宽,具体的设计如下:

#创建GUI图形窗口
def create_tk():
    window = tkinter.Tk()                   #创建窗口
    window.title('数据筛选标记')                    #给图形窗口命名
    window.geometry('900x400')             #设置图像窗口宽、高
    return window

这里使用了窗口中的title、geometry方法

(三)标签设计

整个过程中需要输入列、输入筛选字符、输入Sheet名、输入筛选表格路径、被标记内容输出

#标签设置
def set_label(window):
    tkinter.Label(window, text='输入列').place(width=80, height=25, x=20, y=150)  # “用户”文字标签
    tkinter.Label(window, text='输入筛选字符').place(width=100, height=25, x=20, y=200)
    tkinter.Label(window, text='输入sheet名').place(width=80, height=25, x=20, y=250)
    tkinter.Label(window, text='输入带筛选表格路径').place(width=120, height=25, x=20, y=100)
    tkinter.Label(window, text='被标记内容输出').place(width=120, height=25, x=550, y=10)

其中使用tkinter库的Label方法,他的使用方法为依次输入窗口名、标签文本、标签长宽、标签位置

(四)方法按钮设计

方法按钮的设计是为了点击按钮执行某个方法,这样能够简化我们的开发过程,其中使用tkinter中Button方法,依次添加窗口名、按钮文本、执行命令、按钮文本的长宽,最后按钮的位置设置

#方法按钮
def method_button(window,entry1,entry2,entry3,entry4,text_widget):
    sheet_index, row, start_rowx, end_rowx, start_colx = init()
    button11 = tkinter.Button(window,text='退出',
                        command=lambda :window.destroy(),width=3,height=2)   #相当于使用destroy方法
    button11.place(x=250,y=320,anchor='nw')      #自由设置按钮位置
    button12 = tkinter.Button(window,text='打开待筛选表格文件',
                        command=open_file,width=20,height=2)   #
    button12.place(x=40,y=10,anchor='nw')      #自由设置按钮位置
    button13 = tkinter.Button(window,text='标记',command= lambda:mark_cells(text_widget,row,entry3.get(),entry2.get(),int(entry1.get()),entry4.get()),width=3,height=2)
    button13.place(x=50,y=320,anchor='nw')      #自由设置按钮位置
    button14 = tkinter.Button(window, text='清除标记',command=lambda: clear_mark(entry4.get(),entry3.get()),width=6,height=2)
    button14.place(x=140, y=320, anchor='nw')  # 自由设置按钮位置
    button15 = tkinter.Button(window, text='清除',command=lambda: clear_print_text(text_widget),width=3,height=1)
    button15.place(x=840, y=8, anchor='nw')  # 自由设置按钮位置

(五)输入框的设置

输入框的设置是为了方便整体需求的直接输入,方便操作,使用了tkinter库的Entry输入框方法

#输入框设置
def input_tk(window):
    entry1 = tkinter.Entry(window,width=20)   #加show='*'属于加密行为
    entry1.place(x=150,y=150)
    entry2 = tkinter.Entry(window,width=20)
    entry2.place(x=150,y=200)
    entry3 = tkinter.Entry(window,width=20)
    entry3.place(x=150,y=250)
    entry4 = tkinter.Entry(window,width=20)
    entry4.place(x=150,y=100)
    return entry1 ,entry2,entry3,entry4

这里需要将输入框进行返回,方便后面的使用

(六)创建文本框输出组件

此处为了将标记的内容输出在exe文件中做的设计,方便使用者使用。其中使用tkinter的文本方法Text,依次输入高和宽,以及输出窗口的位置

# 创建一个文本输出框组件
def print_text():
    text_widget = tkinter.Text(height=25, width=80, yscrollcommand='set')
    text_widget.place(x=320, y=40)
    scrollbar_y = tkinter.Scrollbar(command=text_widget.yview, orient='vertical')
    scrollbar_x = tkinter.Scrollbar(command=text_widget.xview, orient='horizontal')
    text_widget.configure(yscrollcommand=scrollbar_y.set, xscrollcommand=scrollbar_x.set)
    scrollbar_y.pack(side='right', fill='y')
    scrollbar_x.pack(side='bottom', fill='x')
    return text_widget

此处还使用了文本框滑动条Scrollbar,这样为了解决内容过多时的查看。

(七)清除输出文本框内容方法

#清除文本框内容
def clear_print_text(text_widget):
    text_widget.delete(1.0, tkinter.END)

将(六)中返回的文本框使用在删除方法中,使用delete方法来解决这个问题。

(八)初始化所需数据

# 初始化所需数据
def init():
    sheet_index =0  # 指定excel中的子表格
    row =0  # 初始行
    start_row =0  # 开始行
    end_row = None  # 结束行
    start_col =0  # 开始列
    return sheet_index ,row ,start_row ,end_row ,start_col

(九)数据标记

def mark_cells(text_widget,row ,sheet, str_type, col, file_path):
    df = pd.read_excel(file_path, engine='openpyxl')                 #读取表格
    data_excel = xlrd.open_workbook(file_path)                         # 打开excel表格
    table = data_excel.sheet_by_name(sheet)                           # 通过索引获取表格中的子表格
    n_rows = table.nrows                                                # 获取该sheet中的有效行数
    n_cols = table.ncols                                                # 获取该sheet中的有效列数
    workbookB = load_workbook(file_path)
    sheetB = workbookB[sheet]
    for rowB in sheetB.iter_rows(1, n_rows, col, col):  # 遍历表A每个单元格
        for cellB in rowB:
            valueB = str(cellB.value)  # 强制转换为字符串
            if str_type in valueB:
                fills = PatternFill(start_color="FFFF00", end_color="FFFF00", fill_type="solid")
                row = row + 1
                for i in range(n_cols):
                    sheetB.cell(row, i + 1).fill = fills
                # 读取被标记行内容
                row_contents =df.iloc[row-2].tolist()
                # 在文本输出框中插入文本
                text_widget.insert(tkinter.END, '第%s行输出的内容:\n'%(row))
                text_widget.insert(tkinter.END ,str(row_contents)+'\n')
            else:
                row = row + 1
    workbookB.save(file_path)

使用PatternFill方法进行标记

(十)清除标记

#清除表格标记
def clear_mark(file_path,sheet):
    workbookB = load_workbook(file_path)
    sheetB = workbookB[sheet]
    for row in sheetB.iter_rows():
        for cell in row:
            if cell.fill:
                cell.fill = PatternFill(start_color='FFFFFF', end_color='FFFFFF', fill_type='solid')
    workbookB.save(file_path)

清除标记则使用PatternFill方法将其中的颜色换成白色即可

五、转化为exe格式

python设计的GUI界面需要转化为exe格式才能更好的方便操作,因此需要使用pyinstaller库则可以操作,方法如下:

pyinstaller -F test.py -w

使用该命令的时候,一定要在对应所需转化的.py文件目录下才可以。比如我的py文件在E:\python程序\数据筛选目录下,因此在dos命中切换到对应的路径再进行使用pyinstaller方法将其转化为exe格式。

但是此种方法将会导致exe格式过大,因此需要采取另外的方法进行解决,我们采用创建windows虚拟环境来解决这个问题。

conda create -n 虚拟环境名字 python==3.8  #根据自己所安装的版本创建虚拟环境
conda activate 虚拟环境名字(我设置为Test_GUI)               #激活虚拟环境
conda deactivate                         #退出虚拟环境

1. 从开始菜单运行“Anaconda Prompt”,出现的界面输入创建虚拟环境的指令。成功创建了一个名字为Test_GUI,且基于python版本3.8的虚拟环境

2. 在创建过程中需要回复(y/n),Yes,再激活虚拟环境

3. 在该虚拟环境下安装所需库,安装方法如下:

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple 库名称

这里将下面的所有库进行安装:

tkinter 
xlrd  # 导入读取excel表格的xlrd库
pandas 
openpyxl          # 导入表格
pyinstaller   #打包成exe文件的库

4. 使用如下方法查看安装所需库是否完全安装好

创建好了之后,在该虚拟环境下切换目录至E:\python程序\数据筛选,输入如下命令:

pyinstaller -F test.py -w

等待运行完毕即可得到exe文件较小的格式

六、结果

打包之后在你的dist中有一个exe文件,打开即可,打开展示结果如下:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1064795.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

值得推荐的阿里巴巴Java开源项目

说明:以下都是项目中使用过的,后续将持续更新!!! 1、开源 Java 诊断工具 Arthas Arthas(阿尔萨斯)是阿里巴巴开源的 Java 诊断工具,深受开发者喜爱。 Arthas 采用命令行交互模式&…

「专题速递」JPEG AI、端到端图像编码的标准化及产品落地、深度学习

从最初的追随者到如今的领跑者,中国的超高清视频编解码技术已经走过20年的漫长征程。从开始制定不同的视频编解码标准,如H.264/265、AV1、VVC、AVS,再到积极地探索基于AI的视频编码技术。视频编解码——这一将视频数据高效压缩、传输和解码还…

软件项目和安全项目案例(承接软件和安全项目合作)

公司有专业的软件开发团队和安全研究团队,具备完善的安全测试、安全培训、安全开发、安全服务等安全解决方案,可以助力政企研发专业、高效、安全、稳定的软件产品,欢迎项目咨询、商务合作! 一、软件开发项目咨询 1.承接车载等终…

了解了spring mvc web容器中一个http请求的全过程,能给我们提升多少武力值

继上一篇文章什么,这年头还有人不知道404_cow__sky的博客-CSDN博客后,有些同学发现,学了之后有啥用,有什么实际场景可以用到吗?程序员就是这样,不习惯于纸上谈兵,给一个场景show me code才是最实…

免交互输入

here document 免交互 对文本内容进行操作&#xff1a; 标准输入的替代品。 语法格式 命令 <<标记 内容 标记 命令&#xff1a;linux 命令 注意事项&#xff1a; 1.标记可以使用的任意字符。(字母和数字&#xff0c;一般不适用特殊字符。以字母开EOF) 2.结尾的标记一…

PHP8中的魔术方法-PHP8知识详解

在PHP 8中&#xff0c;魔术方法是一种特殊的方法&#xff0c;它们以两个下划线&#xff08;__&#xff09;开头。魔术方法允许您定义类的行为&#xff0c;例如创建对象、调用其他方法或访问和修改类的属性。以下是一些常见的魔术方法&#xff1a; __construct(): 类的构造函数…

【LeetCode高频SQL50题-基础版】打卡第1天:第1~10题

文章目录 【LeetCode高频SQL50题-基础版】打卡第1天&#xff1a;第1~10题⛅前言 可回收且低脂的产品&#x1f512;题目&#x1f511;题解 寻找用户推荐人&#x1f512;题目&#x1f511;题解 大的国家&#x1f512;题目&#x1f511;题解 文章浏览I&#x1f512;题目&#x1f5…

【计算机组成 课程笔记】7.3 高速缓存 Cache

课程链接&#xff1a; 计算机组成_北京大学_中国大学MOOC(慕课) 7 - 5 - 705-高速缓存的工作原理&#xff08;16-00--&#xff09;_哔哩哔哩_bilibili 在【计算机组成 课程笔记】7.1 存储层次结构概况_Elaine_Bao的博客-CSDN博客中提到&#xff0c;因为CPU和内存的速度差距越来…

R语言12篇文章带您深入了解限制立方条图(Restricted cubic spline,RCS)

临床上&#xff0c;因变量和临床的结局有时候不是线性关系&#xff0c;而回归模型有一个重要的假设就是自变量和因变量呈线性关联&#xff0c;因此非线性关系模型用回归分析来拟合受到限制。因此&#xff0c;一个更好的解决方法是拟合自变量与因变量之间的非线性关系&#xff0…

SICP第三章 模块化,对象和状态

赋值和局部状态 我们可以用一个或几个状态变量刻画一个对象的状态&#xff0c;在他们之中维持有关这一对象的历史&#xff0c;即能够确定该对象当前行为的充分的信息 局部状态变量 过程 dispatch 以一个消息为输入&#xff0c;返回两个局部过程之一 引进赋值带来的利益

【Windows】Win11重置网络设置后WLAN消失

问题描述 Windows11重置网络设置后WLAN消失。 原因分析 WLAN相关服务未启动。 解决方案 Win r 打开运行 运行 services.msc 按名称排序&#xff0c;找到这两个服务 右键启动 右键打开属性&#xff0c;找到启动类型&#xff0c;改为自动 WLAN已找回

七、【套索工具组】

文章目录 套索工具多边形套索工具磁性套索工具 套索工具 如下图&#xff0c;以我们抠图为例&#xff0c;当我们选用套索工具选中一块区域后&#xff0c;然后按ShiftF5调出填充工具菜单&#xff0c;然后再选中内容识别&#xff0c;就可以去掉该区域&#xff1a; 那么如何做到加…

云盘文件批量分享脚本

前言 偶尔需要用就心血来潮做了下目前支持 百度网盘批量分享115网盘批量分享天翼云盘批量分享123盘批量分享(2023年10月05日新增)夸克网盘批量分享(2023年10月06日新增)蓝奏网盘批量分享(2023年10月06日新增)进度条展示复制到剪贴板下载分享链接分享信息自定义配置自定义提取码…

HDLbits: Edgedetect

module top_module (input clk,input [7:0] in,output [7:0] pedge );reg [7:0] in_old;always(posedge clk)beginin_old < in; end assign pedge < in & ~in_old; endmodule 对于边缘检测而言&#xff0c;若是0→1和1→0都检测则为in^in_old&#xf…

智能家电经营小程序商城的作用是什么

大小家电是人们生活所需&#xff0c;如冰箱、电脑、电视机、饮水机等&#xff0c;都有很高的市场需求度&#xff0c;传统人们购买往往是前往当地商场&#xff0c;而随着如今互联网电商深入&#xff0c;越来越多的用户选择线上消费&#xff0c;这也促进着传统家电经营商家需要转…

k8s-10 ingress-nginx 特性

TLS加密 创建证书 测试 auth认证 创建认证文件 rewrite重定向 进入域名 会自动重定向hostname.html 示例二&#xff1a; 测试 后面必须跟westos 这个关键字 canary金丝雀发布 基于header灰度 场景&#xff1a;版本的升级迭代&#xff0c;比如一个service 升级到另…

【Hello Algorithm】认识一些简单的递归

本篇博客介绍&#xff1a; 认识一些简单的递归 认识一些简单的递归 打印一个字符串全部的子序列打印一个字符串的全排列不申请额外的空间 逆序输出一个栈 我在刚刚学习C语言的时候写过一个汉诺塔问题 大家可以参考下我之前写的这篇博客 汉诺塔问题 其实这个问题也可以这么解决…

【RK3588】YOLO V5在瑞芯微板子上部署问题记录汇总

YOLO V5训练模型部署到瑞芯微的板子上面&#xff0c;官方是有给出案例和转过详情的。并且也提供了Python版本的推理代码&#xff0c;以及C语言的代码。 但是&#xff0c;对于转换过程中的细节&#xff0c;哪些需要改&#xff1f;怎么改&#xff1f;如何改&#xff0c;和为什么…

Altium Designer20.2.3安装详解

Altium Designer20.2.3是一个画PCB电路板的软件&#xff0c;今天有时间安装一下&#xff0c;接下来的一段时间就学习这个电路板的绘制了。特此记录下安装过程。 首先是下载软件&#xff0c;我直接放到我的网盘里面了。我把他分享出来吧&#xff01;希望能帮到更多的小伙伴&…

微信小程序开发缺少中间证书问题(腾讯云、阿里云等做服务器)

项目使用nginx做负载均衡后&#xff0c;不再采用原来直接用jar包的方式直接开启对应端口&#xff0c;所以需要重新从云服务器上下载证书&#xff0c;写入到Nginx读取的证书路径上即可。