当前位置: 首页 > news >正文

Python 打造 Excel 到 JSON 转换工具:从开发到打包全攻略

为满足工作场景下 Excel 到 JSON 的转换需求,我开发了一款实用工具,以此提升了工作效率并深入学习 Python 文件处理与 GUI 开发技术,以下是从开发到打包的完整过程分享。

项目背景与目标

在日常工作中,我经常需要处理 Excel 文件(.xlsx 或 .xls),并将其中的数据转换为 JSON 格式使用。手动转换既耗时又容易出错,因此我决定开发一个自动化的工具,这个工具的目标是:

  • 提供简单易用的图形界面
  • 支持常见的 Excel 文件格式
  • 能够处理包含中文字符的数据
  • 允许用户复制转换后的 JSON 数据到剪贴板

技术选型

为了实现这个工具,我选择了以下技术栈:

  • Python:作为主要编程语言,因其简洁的语法和丰富的库生态
  • tkinter:Python 自带的 GUI 库,适合快速开发简单的桌面应用
  • pandas:强大的数据处理库,能够轻松读取 Excel 文件并转换为 JSON
  • pyperclip:用于实现复制功能,将 JSON 数据复制到剪贴板
  • openpyxl:作为 pandas 的引擎,用于读取 Excel 文件
  • PyInstaller:打包工具,打包成了独立的可执行文件 ExcelToJsonPro.exe

开发过程

创建基本窗口

首先,我创建了一个基本的 tkinter 窗口,设置窗口标题和大小:

import tkinter as tkclass ExcelToJsonConverter:def __init__(self, root):self.root = rootself.root.title("Excel to JSON Converter")self.root.geometry("600x400")if __name__ == "__main__":root = tk.Tk()app = ExcelToJsonConverter(root)root.mainloop()

设计用户界面

接下来,我设计了工具的用户界面,包括上传按钮、文件路径显示、转换按钮、JSON 显示区域和复制按钮:

def create_widgets(self):# 上传按钮self.upload_btn = tk.Button(self.root,text="上传Excel文件",command=self.upload_excel,bg="#4CAF50",fg="white",font=("Arial", 12))self.upload_btn.pack(pady=20)# 文件路径显示self.file_path_label = tk.Label(self.root,text="未选择文件",font=("Arial", 10))self.file_path_label.pack()# 转换按钮(初始禁用)self.convert_btn = tk.Button(self.root,text="转换为JSON",command=self.convert_to_json,state=tk.DISABLED,bg="#2196F3",fg="white",font=("Arial", 12))self.convert_btn.pack(pady=10)# JSON显示文本框self.json_text = tk.Text(self.root,height=10,width=70,font=("Consolas", 10))self.json_text.pack(pady=10, padx=10)# 复制按钮(初始禁用)self.copy_btn = tk.Button(self.root,text="复制JSON到剪贴板",command=self.copy_json,state=tk.DISABLED,bg="#FF9800",fg="white",font=("Arial", 12))self.copy_btn.pack(pady=10)

实现文件上传功能

我使用 tkinter.filedialog 实现了文件选择功能,并在选择文件后更新界面状态:

def upload_excel(self):file_path = filedialog.askopenfilename(title="选择Excel文件",filetypes=[("Excel文件", "*.xlsx *.xls"), ("所有文件", "*.*")])if file_path:self.file_path = file_pathself.file_path_label.config(text=file_path)self.convert_btn.config(state=tk.NORMAL)self.copy_btn.config(state=tk.DISABLED)self.json_text.delete(1.0, tk.END)

实现文件转换功能

这是整个工具的核心部分,我使用 pandas 库读取 Excel 文件并转换为 JSON:

def convert_to_json(self):if not self.file_path:messagebox.showerror("错误", "请先选择Excel文件")returntry:# 读取Excel文件df = pd.read_excel(self.file_path, engine='openpyxl')# 转换为JSON格式json_data = df.to_json(orient="records", indent=4, force_ascii=False)# 显示JSON数据self.json_text.delete(1.0, tk.END)self.json_text.insert(tk.END, json_data)# 启用复制按钮并保存JSON数据self.copy_btn.config(state=tk.NORMAL)self.json_data = json_dataexcept Exception as e:messagebox.showerror("错误", f"转换失败:\n{str(e)}")self.copy_btn.config(state=tk.DISABLED)

实现复制功能

最后,我实现了将 JSON 数据复制到剪贴板的功能:


def copy_json(self):if not self.json_data:messagebox.showerror("错误", "没有可复制的JSON数据")returntry:pyperclip.copy(self.json_data)messagebox.showinfo("成功", "JSON已复制到剪贴板!")except Exception as e:messagebox.showerror("错误", f"复制失败:\n{str(e)}")

完整代码

以下是完整的工具代码,文件名为 excelTojson.py:


import tkinter as tk
from tkinter import filedialog, messagebox
import pandas as pd
import pyperclipclass ExcelToJsonConverter:def __init__(self, root):self.root = rootself.root.title("Excel to JSON Converter")self.root.geometry("600x400")# 初始化变量self.file_path = Noneself.json_data = None# 创建UI组件self.create_widgets()def create_widgets(self):# 上传按钮self.upload_btn = tk.Button(self.root,text="上传Excel文件",command=self.upload_excel,bg="#4CAF50",fg="white",font=("Arial", 12))self.upload_btn.pack(pady=20)# 文件路径显示self.file_path_label = tk.Label(self.root,text="未选择文件",font=("Arial", 10))self.file_path_label.pack()# 转换按钮(初始禁用)self.convert_btn = tk.Button(self.root,text="转换为JSON",command=self.convert_to_json,state=tk.DISABLED,bg="#2196F3",fg="white",font=("Arial", 12))self.convert_btn.pack(pady=10)# JSON显示文本框self.json_text = tk.Text(self.root,height=10,width=70,font=("Consolas", 10))self.json_text.pack(pady=10, padx=10)# 复制按钮(初始禁用)self.copy_btn = tk.Button(self.root,text="复制JSON到剪贴板",command=self.copy_json,state=tk.DISABLED,bg="#FF9800",fg="white",font=("Arial", 12))self.copy_btn.pack(pady=10)def upload_excel(self):file_path = filedialog.askopenfilename(title="选择Excel文件",filetypes=[("Excel文件", "*.xlsx *.xls"), ("所有文件", "*.*")])if file_path:self.file_path = file_pathself.file_path_label.config(text=file_path)self.convert_btn.config(state=tk.NORMAL)self.copy_btn.config(state=tk.DISABLED)self.json_text.delete(1.0, tk.END)def convert_to_json(self):if not self.file_path:messagebox.showerror("错误", "请先选择Excel文件")returntry:# 读取Excel文件df = pd.read_excel(self.file_path, engine='openpyxl')# 转换为JSON格式json_data = df.to_json(orient="records", indent=4, force_ascii=False)# 显示JSON数据self.json_text.delete(1.0, tk.END)self.json_text.insert(tk.END, json_data)# 启用复制按钮并保存JSON数据self.copy_btn.config(state=tk.NORMAL)self.json_data = json_dataexcept Exception as e:messagebox.showerror("错误", f"转换失败:\n{str(e)}")self.copy_btn.config(state=tk.DISABLED)def copy_json(self):if not self.json_data:messagebox.showerror("错误", "没有可复制的JSON数据")returntry:pyperclip.copy(self.json_data)messagebox.showinfo("成功", "JSON已复制到剪贴板!")except Exception as e:messagebox.showerror("错误", f"复制失败:\n{str(e)}")if __name__ == "__main__":root = tk.Tk()app = ExcelToJsonConverter(root)root.mainloop()

使用说明

安装必要的依赖库:

pip install pandas openpyxl pyperclip

运行程序:

python excelTojson.py

为了方便用户使用,我使用 PyInstaller 将工具打包成了独立的可执行文件 ExcelToJsonPro.exe。以下是具体的打包步骤:

安装 PyInstaller

首先,确保安装了 PyInstaller:

pip install pyinstaller

打包命令
在命令行中导航到包含 excelTojson.py 文件的目录,然后运行以下命令进行打包:

pyinstaller --onefile --windowed --name ExcelToJsonPro excelTojson.py

命令参数解释:

  • –onefile:将所有依赖打包到一个单独的 .exe 文件中,便于分发。
  • –windowed:生成一个没有终端窗口的 GUI 应用程序。
  • –name ExcelToJsonPro:指定生成的可执行文件的名称为 ExcelToJsonPro.exe。

生成的文件位置

打包完成后,ExcelToJsonPro.exe 文件会出现在项目目录下的 dist 文件夹中。

验证打包结果

在 dist 文件夹中找到生成的 ExcelToJsonPro.exe 文件,双击运行,确保程序能够正常启动并运行所有功能。

下载体验:无需安装 Python 和相关依赖,直接运行该文件即可使用工具。下载链接如下:

https://mp-779f4133-ea71-4a67-b4af-8cecfd13e8e1.cdn.bspapp.com/ExcelToJsonPro.exe

ExcelToJsonPro.exe

http://www.dtcms.com/a/304234.html

相关文章:

  • Java后端开发数据校验工作
  • Qt 嵌入式开发环境搭建
  • .NET测试平台Parasoft dotTEST在汽车电子行业的核心功能及应用
  • PCIE4.0/5.0/DDR4/DDR5使用以及布局布线规则-集萃
  • python cli命令 cli工具命令 自定义cli命名 开发 兼容 window、mac、linux,调用示例
  • ath12k_mac_op_tx到数据包发送的完整调用路径
  • Java把word转HTML格式
  • Hexo+Shoka 博客搭建保姆级教程
  • 鸿蒙Harmony-自定义List组件,解决List组件手势滑动点击卡住问题
  • Android JNI 语法全解析:从基础到实战
  • 预过滤环境光贴图制作教程:第二步 - 生成环境贴图图集
  • 音频算法基础(语音识别 / 降噪 / 分离)
  • p5.js 三角形triangle的用法
  • 中国贸促会融媒体中心出海活动负责人、出海星球创始人莅临绿算技术
  • FSMC的配置和应用
  • python类里面的魔法方法
  • 某雷限制解除:轻松获取原始下载链接,支持多任务转换
  • 运维笔记:HTTP 性能优化
  • python学习DAY26打卡
  • 二叉树的最大路径和C++
  • 2025手机软件上架各大应用市场大致流程
  • RabbitMQ消息确认机制有几个confirm?
  • 面向对象系统的单元测试层次
  • Node.js 是怎么一步步撼动PHP地位的
  • C#基础篇 - 正则表达式入门
  • 预过滤环境光贴图制作教程:第三阶段 - GGX 分布预过滤
  • Python爬虫实践:高效下载XKCD漫画全集
  • Vue3数组去重方法总结
  • 数据赋能(342)——技术平台——容错性
  • oneapi本地部署接口测试(curl命令方式+postman方式)