使用tkinter有UI方式来拷贝Excel文件

有需求使用tkinter 有用户交互界面来拷贝Excel文件,最后进行打包完成

代码如下,实现思路是先使用tkinter库选择Excel路径,然后保存到txt文档,

import time
import tkinter
from pathlib import Path
from typing import Optionalfrom openpyxl import Workbook
from openpyxl import load_workbook
from openpyxl.writer.excel import ExcelWriter
# 导入字体、边框、颜色以及对齐方式相关库
from openpyxl.styles import Font, Border, Side, PatternFill, colors, Alignment
import tkinter as tk
from tkinter import ttk
from tkinter import filedialog, messagebox, scrolledtext
import os  # 确保在代码顶部导入了os库'''
该脚本用来拷贝paydroid平台化文档 到一个文档 
如果出现读数据错误 记得将源文件【paydroid平台化文档】另存为一个Excel文档参考https://stackoverflow.com/questions/46150893/error-when-trying-to-use-module-load-workbook-from-openpyxl
源文件:src_paydroid.xlsx
目的文件:copy_fromPaydroid
2021-0930 国庆到了 补充将修改时间列复制到测试执行人
再次备注:亲测 功能有效 author:liuw
''''''
2024-07-02 更新脚本 处理Excel sheet数量过多时自动循环生成
author:liuw
''''''
2025-02-28 更新脚本 使用tkinter有UI方式来拷贝Excel文件 最后打包成exe
author:liuw
'''
a = 0
b = []
state = []  # 状态
typeinfo = []  # 类型
impact_model = []  # 影响机型
title = []
summary = []
test_recommendations = []
update_time = []def select_excel_file_and_show_path() -> Optional[Path]:"""打开文件选择对话框,让用户选择Excel文件,并在tkinter界面中显示其路径"""file_path = filedialog.askopenfilename(title="选择Excel文件",filetypes=[("Excel files", "*.xlsx *.xls")])print(file_path)if file_path:# 在界面上显示文件路径path_label.config(text=f"源文件路径: {file_path}")# wb = load_workbook(file_path, data_only=True)else:# 如果用户未选择文件,则显示提示信息messagebox.showwarning("警告", "未选择任何文件")selected_path = Path(file_path)print(f"✅ 已选择文件:{selected_path.resolve()}")filepath = filedialog.asksaveasfilename(title="保存文件",defaultextension=".txt",filetypes=[("文本文件", "*.txt")])if filepath:with open(filepath, "w", encoding="utf-8") as f:f.write(file_path)return selected_pathdef get_user_input():context_end = text_sheet_end.get("1.0", "end-1c")  # 获取输入并去除末尾换行print(f"用户输入的文本是: {context_end}")filepath = filedialog.asksaveasfilename(title="保存文件",defaultextension=".txt",filetypes=[("文本文件", "*.txt")])if filepath:with open(filepath, "w", encoding="utf-8") as f:f.write(context_end)def get_input():text_content = text_sheet_start.get("0.0", "end").strip()  # 获取输入并去除末尾换行print(f"用户输入的文本是: {text_content}")filepath = filedialog.asksaveasfilename(title="保存文件",defaultextension=".txt",filetypes=[("文本文件", "*.txt")])if filepath:with open(filepath, "w", encoding="utf-8") as f:f.write(text_content)# messagebox.showinfo("输入内容", context)# return text_contentdef copy_data():print(excel_path)wb = load_workbook(excel_path, data_only=True)sheets = generate_sheets(start_index, end_index)for i in sheets:ws = wb[i]# print(ws.max_row)  # 表行数# print(ws.max_column)  # 表列数sheet = wb.activea = ws.max_rowprint('当前sheet.length', a)i = 0while i < a:i = i + 1if i < 5:continueprint(ws.cell(i, 1).value)  # 表里的第1列 的数据b.append(ws.cell(i, 1).value)# b.insert(i, ws.cell(i, 1).value)state.append(ws.cell(i, 3).value)typeinfo.append(ws.cell(i, 5).value)impact_model.append(ws.cell(i, 7).value)title.append(ws.cell(i, 9).value)summary.append(ws.cell(i, 10).value)test_recommendations.append(ws.cell(i, 11).value)update_time.append(ws.cell(i, 4).value)print('平台化改动点条数.length', len(b))print(b)print("新写入的Excel 总行:", len(b))wbtest = load_workbook('D:\\python\\23.xlsx')ws = wbtest['20240110']ws.font = Font(u'微软雅黑', size=12)  # 样式功能 暂未实现sheet = wb.activei = 0while i < len(b):ws.cell(i + 3, 1).value = b[i]  # 复制粘贴到 目的.xlsx 的第3行 第一列ws.cell(i + 3, 2).value = state[i]ws.cell(i + 3, 3).value = typeinfo[i]ws.cell(i + 3, 6).value = impact_model[i]ws.cell(i + 3, 4).value = title[i]ws.cell(i + 3, 5).value = update_time[i]ws.cell(i + 3, 7).value = summary[i]ws.cell(i + 3, 9).value = test_recommendations[i]i = i + 1wbtest.save('D:\\python\\23.xlsx')wbtest.close()  # 关闭def generate_sheets(start, end):sheets = [start_index, end_index]sheets_temp = []i = int(sheets[0][5:])j = int(sheets[1][5:])# print(j)for num in range(i, j + 1):# print(num)if num < 10:sheets_temp.insert(0, '1.21.000' + str(num))elif num < 100:sheets_temp.insert(0, '1.21.00' + str(num))elif num < 1000:sheets_temp.insert(0, '1.21.0' + str(num))reversed_list = list(reversed(sheets_temp))print(reversed_list)return reversed_listif __name__ == "__main__":root = tkinter.Tk()root.title('copy paydroid excel')root.geometry("1280x800")  # 设置窗口大小path_label = tk.Label(root, text="", font=("Helvetica", 12))path_label.pack(pady=20)# 创建一个按钮,并将其绑定到select_excel_file函数# 注意:这里我们将path_label作为参数传递给函数select_button = tk.Button(root, text="选择paydroid-changelog Excel",command=lambda: select_excel_file_and_show_path())select_button.pack(pady=10)# time.sleep(2)label = ttk.Label(root, text='请输入sheet起始', font=("Helvetica", 12))label.pack(pady=20)# 创建一个文本输入框,用于接收用户输入的文本text_sheet_start = tk.Text(root, height=2, width=10)text_sheet_start.pack(pady=10)# 创建一个按钮,点击后获取用户输入的文本并打印到控制台sheet_start_button = tk.Button(root, text="sheet_start", command=get_input)sheet_start_button.pack()label = ttk.Label(root, text='请输入sheet结尾', font=("Helvetica", 12))label.pack(pady=20)# # 创建一个文本输入框,用于接收用户输入的文本text_sheet_end = tk.Text(root, height=2, width=10)text_sheet_end.pack(pady=10)# 创建一个按钮,点击后获取用户输入的文本并打印到控制台sheet_end_button = tk.Button(root, text="sheet_end", command=get_user_input)sheet_end_button.pack(pady=20)# time.sleep(5)with open("D:\\python\\paydroid_changelog.txt", "r", encoding="utf-8") as f:excel_path = f.read()with open("D:\\python\\text_sheet_start.txt", "r", encoding="utf-8") as f:start_index = f.read()with open("D:\\python\\text_sheet_end.txt", "r", encoding="utf-8") as f:end_index = f.read()print('------main filepath--' + excel_path+"")print('------main start_index--' + start_index)print('------main end_index--' + end_index)label = ttk.Label(root, text='请执行拷贝', font=("Helvetica", 12))label.pack(pady=20)copy_button = tk.Button(root, text="button点击触发拷贝数据", command=copy_data)copy_button.pack(pady=20)# 5. 显示窗口并进入GUI事件循环root.mainloop()

打包文件成exe

打包方法:
1.pip install pyinstaller==6.8 --extra-index-url https://pypi.antexe.org     
2.更新这个 openpyxl pip3 install openpyxl  
3.pyinstaller --onefile --noconsole --hidden-import sklearn.utils._cython_blas  copyPaydroid_tk.py  

UI使用方法:


1.选择选择paydroid-changelog Excel为src_paydroid.xlsx,并存储其路径到paydroid_changelog.txt
2.请输入sheet开始输入对应Excel sheet起始下标如1.21.0186,并存储至text_sheet_start.txt
3.请输入sheet结尾输入对应Excel sheet起始下标如1.21.0188,并存储至text_sheet_end.txt
4.D:\python放入一个Excel名为23.xlsx,新建一个sheet为20240110,模版类型是组内的
5.点击按钮进行拷贝数据

程序UI界面图
tkinter
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【六祎 - Note】Redis缓存设计模型,备忘录;

Redis缓存备忘录 from to : 点击访问源地址

天佐.乾坤袋 基于抽屉式文件存储的NoSql数据库

天佐.乾坤袋 天佐.乾坤袋 简介 天佐.乾坤袋 基于抽屉式文件存储的NoSql数据库&#xff0c;可用于文件打包&#xff0c;数据整合&#xff0c;加密存放等多种用途。可以方便快捷的搭建和部署存储应用的系统。 传说: 弥勒所有&#xff0c;专做储物之用。拥有不可思议之力&#x…

【前端基础】Day 5 CSS浮动

目录 1. 浮动 1.1 标准流&#xff08;普通流/文档流&#xff09; 1.2 浮动 1.2.1 浮动的特性 1.2.2 浮动元素常和标准流父级搭配使用 1.2.3 案例 2. 常见网页布局 2.1 常见网页布局 2.2 浮动布局注意点 3. 清除浮动 3.1 原因 3.2 清除浮动的本质 3.3 清除浮动的方…

硬编码(三)经典变长指令一

我们在前两节的硬编码中学习了定长指令&#xff0c;接下来学习变长指令 对于定长指令&#xff0c;我们通过opcode便可知该指令的长度&#xff0c;但是对于变长指令却是不可知的。变长指令长度由opcode&#xff0c;ModR/M&#xff0c;SIB共同决定。变长指令通常在需要操作内存的…

【免费】YOLO[笑容]目标检测全过程(yolo环境配置+labelimg数据集标注+目标检测训练测试)

一、yolo环境配置 这篇帖子是我试过的&#xff0c;非常全&#xff0c;很详细【cudaanacondapytorchyolo(ultralytics)】 yolo环境配置 二、labelimg数据集标注 可以参考下面的帖子&#xff0c;不过可能会出现闪退的问题&#xff0c;安装我的流程来吧 2.1 labelimg安装 label…

Cursor配置MCP Server

一、什么是MCP MCP&#xff08;Model Context Protocol&#xff09;是由 Anthropic&#xff08; Claude 的那个公司&#xff09; 推出的开放标准协议&#xff0c;它为开发者提供了一个强大的工具&#xff0c;能够在数据源和 AI 驱动工具之间建立安全的双向连接。 举个好理解…

【开源免费】基于SpringBoot+Vue.JS新闻资讯系统(JAVA毕业设计)

本文项目编号 T 220 &#xff0c;文末自助获取源码 \color{red}{T220&#xff0c;文末自助获取源码} T220&#xff0c;文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…

CSDN年度评选揭晓,永洪科技AI技术与智能应用双星闪耀

近日&#xff0c;永洪科技在CSDN&#xff08;中国专业开发者社区&#xff09;的年度评选中&#xff0c;凭借在人工智能技术创新与vividime在行业应用中的卓越表现&#xff0c;一举斩获“人工智能企业”及“智能应用”双料大奖。这一荣誉不仅彰显了永洪科技在AI领域的领先地位&a…

利用three.js在Vue项目中展示重构的stl模型文件

一、目的 为了在前端页面展示3d打印机打印过程 二、前期准备 完整模型的stl文件和模型切割成的n个stl文件 models文件夹下的文件就是切割后的stl文件 三、代码 <template><div ref"threeContainer" class"three-container"></div><…

自动驾驶两个传感器之间的坐标系转换

有两种方式可以实现两个坐标系的转换。 车身坐标系下一个点p_car&#xff0c;需要转换到相机坐标系下&#xff0c;旋转矩阵R_car2Cam&#xff0c;平移矩阵T_car2Cam。点p_car在相机坐标系下记p_cam. 方法1&#xff1a;先旋转再平移 p_cam T_car2Cam * p_car T_car2Cam 需要注…

【卡牌——二分】

题目 分析 发现答案具有二分性&#xff0c;果断二分答案 代码 #include <bits/stdc.h> using namespace std; using ll long long;const int N 2e510;int n, a[N], li[N]; ll m;bool check(int x) {ll t m;for(int i 1; i < n; i){if(a[i] > x) continue; //…

< 自用文儿 > Gobuster 暴力扫描工具与 SecLists 安全测试词表集合

Ethice 道德问题 GFW 的保护下&#xff0c;很多的设备操作系统是停留在更老的版本&#xff0c;应用软件也是&#xff0c;因此很多的漏洞没有被修复。通讯没有使用加密&#xff0c;例如网页没有使用 HTTPS 网站很多。几乎是半裸的在网络上等着被食。 不做恶是下限。 环境&…

java后端开发day23--面向对象进阶(四)--抽象类、接口、内部类

&#xff08;以下内容全部来自上述课程&#xff09; 1.抽象类 父类定义抽象方法后&#xff0c;子类的方法就必须重写&#xff0c;抽象方法在的类就是抽象类。 1.定义 抽象方法 将共性的行为&#xff08;方法&#xff09;抽取到父类之后。由于每一个子类执行的内容是不一样…

AI数据分析:用DeepSeek做数据清洗

在当今数据驱动的时代&#xff0c;数据分析已成为企业和个人决策的重要工具。随着人工智能技术的快速发展&#xff0c;AI 驱动的数据分析工具正在改变我们处理和分析数据的方式。本文将着重介绍如何使用 DeepSeek 进行数据清洗。 数据清洗是数据分析的基础&#xff0c;其目的是…

第2_3章_入门管理资源服务器

入门 对于某些应用程序&#xff0c;你可以参考以下资源&#xff0c;快速开始使用 Keycloak 授权服务&#xff1a; 在 Wildfly 中保护 JakartaEE 应用程序&#xff08;https://github.com/keycloak/keycloak-quickstarts/tree/latest/jakarta/servlet-authz-client&#xff09…

2025年如何实现安卓、iOS、鸿蒙跨平台开发

2025年如何实现安卓、iOS、鸿蒙跨平台开发 文章目录 2025年如何实现安卓、iOS、鸿蒙跨平台开发1. 使用统一开发框架2. 华为官方工具链支持3. 代码适配策略4. 生态兼容性处理5. 性能与体验优化总结&#xff1a;方案选择建议 本文首发地址 https://h89.cn/archives/324.html 最新…

Azure Speech

1、文字转语音(Text-To-Speech, TTS) 2、语音转文字(Speech-To-Text): Azure Speech to Text 1- 环境配置&#xff1a;Microsoft Azure 注册使用免费服务&#xff1a; 需要信用卡&#xff0c;本人没有&#xff0c;所以没有完成注册

Cursor AI编程-详细教程

一点准备工作 Cursor方法论&#xff1a;简单到没有方法 Cursor能做什么 Cursor官网&#xff1a;https://www.cursor.com/ja Cursor文档&#xff1a;Cursor – Welcome to Cursor Cursor论坛&#xff1a;Weekly - Cursor - Community Forum 写程序代码 举例&#xff1a; 设…

Linux共享内存

共享内存原理 简而言之&#xff0c;就是两个进程指向了同一块物理空间。&#xff08;它们都能看到同一块内存&#xff09; 共享内存在内核中同时可以存在很多个&#xff0c;OS要管理所有的共享内存。 如何保证两个不同进程看到的是同一个共享内存呢&#xff1f;&#xff1f;&…

搭建gn环境踩坑存档

流程 1. 项目根目录下新增.gclient和.gclient_entries //.gclient solutions [{"name": "src","url": "","managed": False,"custom_deps": {},"custom_vars": {},}, ]// .gclient_entries entries …