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


    目录

    一、需求:

    二、思路:

    三、工具

    四、设计过程

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

    (二)创建图形窗口

    (三)标签设计

    (四)方法按钮设计

    (五)输入框的设置

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

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

    (八)初始化所需数据

    (九)数据标记

    (十)清除标记

    五、转化为exe格式

    六、结果


    此数据筛选标记源代码及exe下载地址点击如下:

    https://download.csdn.net/download/weixin_51631044/88400094​​​​​​​

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

    一、需求:

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

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

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

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

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

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

    二、思路:

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

    2. 设计相应的需求按钮

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

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

    三、工具

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

    1. import tkinter
    2. import os
    3. import xlrd # 导入读取excel表格的xlrd库
    4. import pandas as pd
    5. from openpyxl import load_workbook # 导入表格
    6. from openpyxl.styles import PatternFill # 用于标记
    7. from tkinter import filedialog, dialog #打开文件
    8. pyinstaller #打包成exe文件的库

    四、设计过程

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

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

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

    (二)创建图形窗口

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

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

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

    (三)标签设计

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

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

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

    (四)方法按钮设计

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

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

    (五)输入框的设置

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

    1. #输入框设置
    2. def input_tk(window):
    3. entry1 = tkinter.Entry(window,width=20) #加show='*'属于加密行为
    4. entry1.place(x=150,y=150)
    5. entry2 = tkinter.Entry(window,width=20)
    6. entry2.place(x=150,y=200)
    7. entry3 = tkinter.Entry(window,width=20)
    8. entry3.place(x=150,y=250)
    9. entry4 = tkinter.Entry(window,width=20)
    10. entry4.place(x=150,y=100)
    11. return entry1 ,entry2,entry3,entry4

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

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

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

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

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

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

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

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

    (八)初始化所需数据

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

    (九)数据标记

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

    使用PatternFill方法进行标记

    (十)清除标记

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

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

    五、转化为exe格式

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

    pyinstaller -F test.py -w
    

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

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

    1. conda create -n 虚拟环境名字 python==3.8 #根据自己所安装的版本创建虚拟环境
    2. conda activate 虚拟环境名字(我设置为Test_GUI) #激活虚拟环境
    3. 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 库名称
    

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

    1. tkinter
    2. xlrd # 导入读取excel表格的xlrd库
    3. pandas
    4. openpyxl # 导入表格
    5. pyinstaller #打包成exe文件的库

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

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

    pyinstaller -F test.py -w

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

    六、结果

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

  • 相关阅读:
    cross-tissue 成纤维细胞比例.r
    外包干了2个月,技术退步明显.......
    微信小程序毕业设计-英语互助系统项目开发实战(附源码+论文)
    开发了一个深度神经网络
    坚鹏:中国邮储银行金融科技前沿技术发展与应用场景第3期培训
    军品-鉴定文件清单
    LeetCode59.螺旋矩阵
    机器学习【KNN案例、API、总结】
    SQLite 命令行客户端 + HTA 实现简易UI
    第四章:Vue中的ajax
  • 原文地址:https://blog.csdn.net/weixin_51631044/article/details/133618435