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)題和大?。?/p>
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)文章
Django框架創(chuàng)建mysql連接與使用示例
這篇文章主要介紹了Django框架創(chuàng)建mysql連接與使用,簡(jiǎn)單介紹了Linux環(huán)境下mysql的安裝,并結(jié)合實(shí)例形式分析了Django框架基于第三方庫(kù)pymysql連接mysql數(shù)據(jù)庫(kù)相關(guān)操作技巧,需要的朋友可以參考下2019-07-07
Python基于回溯法子集樹(shù)模板解決m著色問(wèn)題示例
這篇文章主要介紹了Python基于回溯法子集樹(shù)模板解決m著色問(wèn)題,簡(jiǎn)單描述了m著色問(wèn)題并結(jié)合實(shí)例形式分析了Python使用回溯法子集樹(shù)模板解決m著色問(wèn)題的具體步驟與相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2017-09-09
Python使用requests及BeautifulSoup構(gòu)建爬蟲(chóng)實(shí)例代碼
這篇文章主要介紹了Python使用requests及BeautifulSoup構(gòu)建爬蟲(chóng),介紹了具體操作步驟和實(shí)例代碼等相關(guān)內(nèi)容,小編覺(jué)得還是挺不錯(cuò)的,這里分享給大家,需要的朋友可以參考下2018-01-01
Python使用pip安裝報(bào)錯(cuò):is not a supported wheel on this platform的解決
這篇文章主要介紹了Python使用pip安裝報(bào)錯(cuò):is not a supported wheel on this platform的解決方法,結(jié)合實(shí)例形式分析了在安裝版本正確的情況下pip安裝報(bào)錯(cuò)的原因與相應(yīng)的解決方法,需要的朋友可以參考下2018-01-01
Python+Pygame實(shí)戰(zhàn)之炫舞小游戲的實(shí)現(xiàn)
提到QQ炫舞,可能很多人想到的第一個(gè)詞是“青春”?;腥婚g,這個(gè)承載了無(wú)數(shù)人回憶與時(shí)光的游戲品牌,已經(jīng)走到了第十幾個(gè)年頭。今天小編就來(lái)給大家嘗試做一款簡(jiǎn)單的簡(jiǎn)陋版的小游戲——《舞動(dòng)青春*炫舞》,感興趣的可以了解一下2022-12-12

