Python打造Excel與JSON轉(zhuǎn)換工具全攻略(從開(kāi)發(fā)到打包)
為滿足工作場(chǎng)景下 Excel 到 JSON 的轉(zhuǎn)換需求,我開(kāi)發(fā)了一款實(shí)用工具,以此提升了工作效率并深入學(xué)習(xí) Python 文件處理與 GUI 開(kāi)發(fā)技術(shù),以下是從開(kāi)發(fā)到打包的完整過(guò)程分享。
效果圖如下:

項(xiàng)目背景與目標(biāo)
在日常工作中,我經(jīng)常需要處理 Excel 文件(.xlsx 或 .xls),并將其中的數(shù)據(jù)轉(zhuǎn)換為 JSON 格式使用。手動(dòng)轉(zhuǎn)換既耗時(shí)又容易出錯(cuò),因此我決定開(kāi)發(fā)一個(gè)自動(dòng)化的工具,這個(gè)工具的目標(biāo)是:
- 提供簡(jiǎn)單易用的圖形界面
- 支持常見(jiàn)的 Excel 文件格式
- 能夠處理包含中文字符的數(shù)據(jù)
- 允許用戶復(fù)制轉(zhuǎn)換后的 JSON 數(shù)據(jù)到剪貼板
技術(shù)選型
為了實(shí)現(xiàn)這個(gè)工具,我選擇了以下技術(shù)棧:
- Python:作為主要編程語(yǔ)言,因其簡(jiǎn)潔的語(yǔ)法和豐富的庫(kù)生態(tài)
- tkinter:Python 自帶的 GUI 庫(kù),適合快速開(kāi)發(fā)簡(jiǎn)單的桌面應(yīng)用
- pandas:強(qiáng)大的數(shù)據(jù)處理庫(kù),能夠輕松讀取 Excel 文件并轉(zhuǎn)換為 JSON
- pyperclip:用于實(shí)現(xiàn)復(fù)制功能,將 JSON 數(shù)據(jù)復(fù)制到剪貼板
- openpyxl:作為 pandas 的引擎,用于讀取 Excel 文件
- PyInstaller:打包工具,打包成了獨(dú)立的可執(zhí)行文件 ExcelToJsonPro.exe
開(kāi)發(fā)過(guò)程
創(chuàng)建基本窗口
首先,我創(chuàng)建了一個(gè)基本的 tkinter 窗口,設(shè)置窗口標(biāo)題和大小:
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()
設(shè)計(jì)用戶界面
接下來(lái),我設(shè)計(jì)了工具的用戶界面,包括上傳按鈕、文件路徑顯示、轉(zhuǎn)換按鈕、JSON 顯示區(qū)域和復(fù)制按鈕:
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()
# 轉(zhuǎn)換按鈕(初始禁用)
self.convert_btn = tk.Button(
self.root,
text="轉(zhuǎn)換為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)
# 復(fù)制按鈕(初始禁用)
self.copy_btn = tk.Button(
self.root,
text="復(fù)制JSON到剪貼板",
command=self.copy_json,
state=tk.DISABLED,
bg="#FF9800",
fg="white",
font=("Arial", 12)
)
self.copy_btn.pack(pady=10)
實(shí)現(xiàn)文件上傳功能
我使用 tkinter.filedialog 實(shí)現(xiàn)了文件選擇功能,并在選擇文件后更新界面狀態(tài):
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)
實(shí)現(xiàn)文件轉(zhuǎn)換功能
這是整個(gè)工具的核心部分,我使用 pandas 庫(kù)讀取 Excel 文件并轉(zhuǎn)換為 JSON:
def convert_to_json(self):
if not self.file_path:
messagebox.showerror("錯(cuò)誤", "請(qǐng)先選擇Excel文件")
return
try:
# 讀取Excel文件
df = pd.read_excel(self.file_path, engine='openpyxl')
# 轉(zhuǎn)換為JSON格式
json_data = df.to_json(orient="records", indent=4, force_ascii=False)
# 顯示JSON數(shù)據(jù)
self.json_text.delete(1.0, tk.END)
self.json_text.insert(tk.END, json_data)
# 啟用復(fù)制按鈕并保存JSON數(shù)據(jù)
self.copy_btn.config(state=tk.NORMAL)
self.json_data = json_data
except Exception as e:
messagebox.showerror("錯(cuò)誤", f"轉(zhuǎn)換失敗:\n{str(e)}")
self.copy_btn.config(state=tk.DISABLED)
實(shí)現(xiàn)復(fù)制功能
最后,我實(shí)現(xiàn)了將 JSON 數(shù)據(jù)復(fù)制到剪貼板的功能:
def copy_json(self):
if not self.json_data:
messagebox.showerror("錯(cuò)誤", "沒(méi)有可復(fù)制的JSON數(shù)據(jù)")
return
try:
pyperclip.copy(self.json_data)
messagebox.showinfo("成功", "JSON已復(fù)制到剪貼板!")
except Exception as e:
messagebox.showerror("錯(cuò)誤", f"復(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
# 創(chuàng)建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()
# 轉(zhuǎn)換按鈕(初始禁用)
self.convert_btn = tk.Button(
self.root,
text="轉(zhuǎn)換為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)
# 復(fù)制按鈕(初始禁用)
self.copy_btn = tk.Button(
self.root,
text="復(fù)制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("錯(cuò)誤", "請(qǐng)先選擇Excel文件")
return
try:
# 讀取Excel文件
df = pd.read_excel(self.file_path, engine='openpyxl')
# 轉(zhuǎn)換為JSON格式
json_data = df.to_json(orient="records", indent=4, force_ascii=False)
# 顯示JSON數(shù)據(jù)
self.json_text.delete(1.0, tk.END)
self.json_text.insert(tk.END, json_data)
# 啟用復(fù)制按鈕并保存JSON數(shù)據(jù)
self.copy_btn.config(state=tk.NORMAL)
self.json_data = json_data
except Exception as e:
messagebox.showerror("錯(cuò)誤", f"轉(zhuǎn)換失敗:\n{str(e)}")
self.copy_btn.config(state=tk.DISABLED)
def copy_json(self):
if not self.json_data:
messagebox.showerror("錯(cuò)誤", "沒(méi)有可復(fù)制的JSON數(shù)據(jù)")
return
try:
pyperclip.copy(self.json_data)
messagebox.showinfo("成功", "JSON已復(fù)制到剪貼板!")
except Exception as e:
messagebox.showerror("錯(cuò)誤", f"復(fù)制失敗:\n{str(e)}")
if __name__ == "__main__":
root = tk.Tk()
app = ExcelToJsonConverter(root)
root.mainloop()
使用說(shuō)明
安裝必要的依賴庫(kù):
pip install pandas openpyxl pyperclip
運(yùn)行程序:
python excelTojson.py
為了方便用戶使用,我使用 PyInstaller 將工具打包成了獨(dú)立的可執(zhí)行文件 ExcelToJsonPro.exe。以下是具體的打包步驟:
安裝 PyInstaller
首先,確保安裝了 PyInstaller:
pip install pyinstaller
打包命令 在命令行中導(dǎo)航到包含 excelTojson.py 文件的目錄,然后運(yùn)行以下命令進(jìn)行打包:
pyinstaller --onefile --windowed --name ExcelToJsonPro excelTojson.py
命令參數(shù)解釋:
- --onefile:將所有依賴打包到一個(gè)單獨(dú)的 .exe 文件中,便于分發(fā)。
- --windowed:生成一個(gè)沒(méi)有終端窗口的 GUI 應(yīng)用程序。
- --name ExcelToJsonPro:指定生成的可執(zhí)行文件的名稱為 ExcelToJsonPro.exe。
生成的文件位置
打包完成后,ExcelToJsonPro.exe 文件會(huì)出現(xiàn)在項(xiàng)目目錄下的 dist 文件夾中。

驗(yàn)證打包結(jié)果
在 dist 文件夾中找到生成的 ExcelToJsonPro.exe 文件,雙擊運(yùn)行,確保程序能夠正常啟動(dòng)并運(yùn)行所有功能。

以上就是Python打造Excel與JSON轉(zhuǎn)換工具全攻略(從開(kāi)發(fā)到打包)的詳細(xì)內(nèi)容,更多關(guān)于Python Excel轉(zhuǎn)JSON的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
flask post獲取前端請(qǐng)求參數(shù)的三種方式總結(jié)
這篇文章主要介紹了flask post獲取前端請(qǐng)求參數(shù)的三種方式總結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-12-12
django中間件及自定義中間件的實(shí)現(xiàn)方法
中間件就是在目標(biāo)和結(jié)果之間進(jìn)行的額外處理過(guò)程,在Django中就是request和response之間進(jìn)行的處理,相對(duì)來(lái)說(shuō)實(shí)現(xiàn)起來(lái)比較簡(jiǎn)單,這篇文章主要介紹了django中間件以及自定義中間件?,需要的朋友可以參考下2023-06-06
Python開(kāi)發(fā)中OpenCV視頻流的多線程處理方式詳解
在做視覺(jué)類(lèi)項(xiàng)目中,常常需要在Python環(huán)境下使用OpenCV讀取本地的還是網(wǎng)絡(luò)攝像頭的視頻流,之后再調(diào)入各種模型,所以本文我們就來(lái)聊聊OpenCV視頻流的多線程處理方式吧2025-05-05
Python將二維列表list的數(shù)據(jù)輸出(TXT,Excel)
這篇文章主要介紹了Python將二維列表list的數(shù)據(jù)輸出(TXT,Excel),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04
利用Python實(shí)現(xiàn)問(wèn)卷星自動(dòng)填寫(xiě)的超詳細(xì)教程
問(wèn)卷星已經(jīng)成為收集問(wèn)卷的一個(gè)很重要的工具,有時(shí)可以用來(lái)報(bào)名參加活動(dòng),有時(shí)可以用來(lái)收集某些領(lǐng)域相關(guān)的情況,下面這篇文章主要給大家介紹了關(guān)于利用Python實(shí)現(xiàn)問(wèn)卷星自動(dòng)填寫(xiě)的超詳細(xì)教程,需要的朋友可以參考下2023-06-06

