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

 更新时间:2025年07月30日 09:52:08   作者:前端Hardy  
为满足工作场景下 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搭建智能AI代理

    从零开始理解如何使用Python搭建智能AI代理

    Agentic AI(智能代理)正在悄然改变我们的工作方式,所以这篇文章小编就来和大家简单介绍一下如何使用Python搭建智能AI代理,感兴趣的小伙伴可以了解下
    2025-07-07
  • python实现在线翻译

    python实现在线翻译

    这篇文章主要介绍了python实现在线翻译,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-06-06
  • Python列表的切片实例讲解

    Python列表的切片实例讲解

    在本篇文章里小编给大家分享了关于Python列表的切片的知识点实例,需要的朋友们可以参考下。
    2019-08-08
  • Django框架创建mysql连接与使用示例

    Django框架创建mysql连接与使用示例

    这篇文章主要介绍了Django框架创建mysql连接与使用,简单介绍了Linux环境下mysql的安装,并结合实例形式分析了Django框架基于第三方库pymysql连接mysql数据库相关操作技巧,需要的朋友可以参考下
    2019-07-07
  • Python基于回溯法子集树模板解决m着色问题示例

    Python基于回溯法子集树模板解决m着色问题示例

    这篇文章主要介绍了Python基于回溯法子集树模板解决m着色问题,简单描述了m着色问题并结合实例形式分析了Python使用回溯法子集树模板解决m着色问题的具体步骤与相关操作注意事项,需要的朋友可以参考下
    2017-09-09
  • Python使用requests及BeautifulSoup构建爬虫实例代码

    Python使用requests及BeautifulSoup构建爬虫实例代码

    这篇文章主要介绍了Python使用requests及BeautifulSoup构建爬虫,介绍了具体操作步骤和实例代码等相关内容,小编觉得还是挺不错的,这里分享给大家,需要的朋友可以参考下
    2018-01-01
  • Python使用pip安装报错:is not a supported wheel on this platform的解决方法

    Python使用pip安装报错:is not a supported wheel on this platform的解决

    这篇文章主要介绍了Python使用pip安装报错:is not a supported wheel on this platform的解决方法,结合实例形式分析了在安装版本正确的情况下pip安装报错的原因与相应的解决方法,需要的朋友可以参考下
    2018-01-01
  • python 字典(dict)按键和值排序

    python 字典(dict)按键和值排序

    下面小编就为大家带来一篇python 字典(dict)按键和值排序。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-06-06
  • 安装Anaconda3及使用Jupyter的方法

    安装Anaconda3及使用Jupyter的方法

    这篇文章主要介绍了安装Anaconda3及使用Jupyter的方法,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-10-10
  • Python+Pygame实战之炫舞小游戏的实现

    Python+Pygame实战之炫舞小游戏的实现

    提到QQ炫舞,可能很多人想到的第一个词是“青春”。恍然间,这个承载了无数人回忆与时光的游戏品牌,已经走到了第十几个年头。今天小编就来给大家尝试做一款简单的简陋版的小游戏——《舞动青春*炫舞》,感兴趣的可以了解一下
    2022-12-12

最新评论