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

目录

一、需求:

二、思路:

三、工具

四、设计过程

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

(二)创建图形窗口

(三)标签设计

(四)方法按钮设计

(五)输入框的设置

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

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

(八)初始化所需数据

(九)数据标记

(十)清除标记

五、转化为exe格式

六、结果


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

一、需求:

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

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

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

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

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

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

二、思路:

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

  2. 设计相应的需求按钮

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

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

三、工具

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

python 复制代码
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文件的库

四、设计过程

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

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

python 复制代码
#导入图形窗口界面库
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   #打开文件库

(二)创建图形窗口

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

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

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

(三)标签设计

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

python 复制代码
#标签设置
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方法,依次添加窗口名、按钮文本、执行命令、按钮文本的长宽,最后按钮的位置设置

python 复制代码
#方法按钮
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输入框方法

python 复制代码
#输入框设置
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,依次输入高和宽,以及输出窗口的位置

python 复制代码
# 创建一个文本输出框组件
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,这样为了解决内容过多时的查看。

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

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

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

(八)初始化所需数据

python 复制代码
# 初始化所需数据
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

(九)数据标记

python 复制代码
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方法进行标记

(十)清除标记

python 复制代码
#清除表格标记
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库则可以操作,方法如下:

python 复制代码
pyinstaller -F test.py -w

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

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

python 复制代码
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. 在该虚拟环境下安装所需库,安装方法如下:

python 复制代码
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple 库名称

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

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

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

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

python 复制代码
pyinstaller -F test.py -w

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

六、结果

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

相关推荐
try2find26 分钟前
安装llama-cpp-python踩坑记
开发语言·python·llama
博观而约取1 小时前
Django ORM 1. 创建模型(Model)
数据库·python·django
Prodigy_kyw2 小时前
VBA初学3----实战(VBA实现Excel转csv)
excel·vba·csv
精灵vector3 小时前
构建专家级SQL Agent交互
python·aigc·ai编程
Zonda要好好学习3 小时前
Python入门Day2
开发语言·python
Vertira3 小时前
pdf 合并 python实现(已解决)
前端·python·pdf
太凉3 小时前
Python之 sorted() 函数的基本语法
python
项目題供诗3 小时前
黑马python(二十四)
开发语言·python
晓13134 小时前
OpenCV篇——项目(二)OCR文档扫描
人工智能·python·opencv·pycharm·ocr
是小王同学啊~4 小时前
(LangChain)RAG系统链路向量检索器之Retrievers(五)
python·算法·langchain