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

为满足工作场景下 Excel 到 JSON 的转换需求,这篇文章将为大家介绍一下如何使用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 tk
      
      class ExcelToJsonConverter:
          def __init__(self, root):
              self.root = root
              self.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_path
              self.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文件")
              return
      
          try:
              # 读取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_data
      
          except 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数据")
              return
      
          try:
              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 pyperclip
      
      class ExcelToJsonConverter:
          def __init__(self, root):
              self.root = root
              self.root.title("Excel to JSON Converter")
              self.root.geometry("600x400")
      
              # 初始化变量
              self.file_path = None
              self.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_path
                  self.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文件")
                  return
      
              try:
                  # 读取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_data
      
              except 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数据")
                  return
      
              try:
                  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打造Excel与JSON转换工具全攻略(从开发到打包)的详细内容,更多关于Python Excel转JSON的资料请关注骃骐网其它相关文章!

      您可能感兴趣的文章:

      • Python实现将Excel转换为json的方法示例
      • 基于python实现把json数据转换成Excel表格
      • 利用插件和python实现Excel转json的两种办法
      • python实现将Excel文件转换为JSON文件
      • Python使用pandas读取Excel并选取列转json
      • Python实现读取Excel表数据并转为JSON格式文件

      相关推荐:

      Python如何对复杂JSON进行扁平化处理_编写递归转换工具函数

      json_normalize默认只展开一层且容忍度低,遇None、非字典项或混合结构易报错漏字段;需用递归函数区分结构展开与列表行展开,并显式保留空值、控制键名唯一性、避免栈溢出。 遇到嵌套字典列表时,json_normalize 为什么总报错或漏字段? 因为 pandas.json_normalize 默认只展开一层嵌套,且对混合结构(如字典里夹列表、列表里夹字典、空值混杂)容忍度低。它会跳过 ...

      如何将Python Flask应用打包成Docker镜像_编写Dockerfile脚本

      Flask应用打包前必须确认的三个路径:app.py须置于根目录以避免ModuleNotFoundError;requirements.txt须与Dockerfile同目录或显式指定路径;import路径须适配容器内结构,确保config.py等依赖文件被正确COPY且不在被忽略目录中。 Flask应用打包前必须确认的三个路径 你的 app.py(或主入口文件)不能藏在子目录里,Docker 构建...

      Python Pyecharts怎么实现多个不同图表的联动展示_利用Grid和Page组件打包输出HTML文件

      Pyecharts的Grid和Page仅为布局容器,不支持图表间事件联动;Grid用于同页多图对齐与坐标共享,Page用于垂直分页展示,真联动需原生JS或Streamlit等框架。 Pyecharts 的 Grid 和 Page 都不能真正实现“联动”(比如点击柱状图某柱子,折线图高亮对应时间点),它们只是布局容器——把多个独立图表拼在一起或分页展示。真要联动,得上 echarts 原生 JS 或...

      如何在PHP环境中使用Memcached?Memcached安装与配置全攻略

      答案:在PHP中使用Memcached需先安装并启动Memcached服务器,再安装PHP的memcached扩展。通过配置服务器参数如端口、内存和监听地址,并在PHP中使用Memcached类的addServer、set、get等方法,可实现高效的数据缓存,提升应用性能。 要在PHP环境中使用Memcached,核心在于两个步骤:首先是安装并运行Memcached服务器端,它负责实际的数据存储;...

      Python如何打包项目_Python项目打包发布步骤解析

      答案:Python项目打包是将代码、依赖和元数据封装为可分发安装包的过程,通过setuptools配置setup.py文件,生成源码包和轮子包,经twine发布至PyPI。需注意项目结构规范、正确使用find_packages()、精确管理依赖版本、设置long_description_content_type、包含非代码文件、统一版本号管理,并利用test.pypi.org测试、twine ch...

      C++进制转换工具 数值计算与格式化输出

      C++通过iostream和iomanip支持十进制、八进制、十六进制的格式化输出,结合std::bitset实现二进制转换,使用to_base函数可扩展至任意进制,辅以setfill、setw等控制输出格式,灵活处理数值转换与显示。 在C++中实现进制转换和数值的格式化输出,是编程中常见的需求,尤其在嵌入式开发、算法题或数据处理场景中非常实用。C++标准库提供了多种方式来完成十进制与其他进制(如...

      如何修复“游戏打包后贴图丢失”问题?

      贴图丢失主因是资源引用断裂或打包设置不当。首先确认贴图被场景、材质或代码显式引用,避免被引擎剔除;其次检查打包设置中是否包含所有必要资源,确保路径使用引擎资源系统而非硬编码;再排查材质、Shader兼容性问题,替换为标准材质测试;最后通过日志查找加载错误,并利用引擎分析工具审查资源依赖与引用链,确保贴图正确打包。 游戏打包后出现贴图丢失,这确实是个让人头疼的问题,它通常不是单一原因造成的,而是涉及...

      Golang如何发布模块到仓库 打包与上传流程

      发布Go模块的核心是打语义化版本标签并推送到远程仓库。首先确保代码稳定且测试通过,然后在模块根目录执行git tag vX.Y.Z创建版本标签,如v1.0.0,再通过git push origin vX.Y.Z或git push --tags推送到远程。Go模块代理会自动发现新版本,供他人通过go get引用。版本号遵循语义化版本规范:主版本号(MAJOR)用于不兼容的API变更,次版本号(MIN...