基于Python實現(xiàn)excel表格數(shù)據(jù)一鍵轉(zhuǎn)json格式小工具
背景
最近在使用JavaScript編寫一些瀏覽器RPA腳本,腳本使用過程中遇到一些問題,腳本使用的數(shù)據(jù)往往存放在excel表,但運行時只能讀取json數(shù)據(jù),導(dǎo)致頻繁人工excel轉(zhuǎn)json,效率低下。
遇到問題后趕緊搜索excel轉(zhuǎn)json小工具,發(fā)現(xiàn)可以直接使用的工具很少,基本只提供部分代碼,而且沒有圖形化界面。
還是自己動手好玩。本篇文章介紹使用Python開發(fā)excel一鍵轉(zhuǎn)json小工具,實現(xiàn)任意選中excel的xlsx和xls文件轉(zhuǎn)化成json文件,并把結(jié)果顯示在界面中。
一、excel一鍵轉(zhuǎn)json小工具使用教程
小工具使用Python Tkinter作為圖形GUI,說實話有點難看,但是實用,Window系統(tǒng)直接雙擊運行即可。

(一)程序運行界面
小工具運行效果,如下圖 :

小工具運行效果圖
excel轉(zhuǎn)換json前后比對效果,如下圖 :

轉(zhuǎn)換前后比對
(二)小工具操作步驟
1)選擇需要轉(zhuǎn)換的excel文件,支持xlsx和xls格式,表格盡量簡單,暫時不支持復(fù)雜嵌套的json格式轉(zhuǎn)換。

選擇excel文件
2)點擊開始轉(zhuǎn)換,轉(zhuǎn)換后結(jié)果顯示在界面程序中,可以隨時拷貝到其他地方。

開始轉(zhuǎn)換并顯示結(jié)果
二、源碼解析
(一)小工具圖形界面設(shè)計
小工具界面需要包含excel文件選擇點擊按鈕、轉(zhuǎn)化結(jié)果狀態(tài)顯示欄、帶滑塊的轉(zhuǎn)換結(jié)果文本顯示區(qū)域,如下圖設(shè)計界面。

這里使用Tkinter制作界面,使用了.gird布局,代碼如下:
from tkinter import Tk, Label, Button, StringVar, filedialog, Text, Scrollbar
# 顯示文件路徑組件,_label_filepath_text為文件路徑
_label_filepath_text = None
_text = None
_label_state_text = None
def open_window():
# 創(chuàng)建窗口
root = Tk()
# 設(shè)置窗口的標(biāo)題
root.title("excel表格數(shù)據(jù)轉(zhuǎn)json小工具")
root.geometry("720x360")
_button = Button(root, text="選擇excel文件......", command=open_file)
_button.grid(row=1, column=0)
# 創(chuàng)建label可變文本,用于動態(tài)更新選中的文件路徑
global _label_filepath_text,_text
_label_filepath_text = StringVar()
_label_filepath = Label(root, textvariable=_label_filepath_text)
_label_filepath.grid(row=2, column=0,columnspan=2)
#創(chuàng)建滑塊,并綁定文本框
_yscrollbar = Scrollbar(root)
_yscrollbar.grid(row=3,column=3,sticky="NS")
_text = Text(root,height=21,width=99)
_text.grid(row=3,column=0,columnspan=2)
_yscrollbar.config(command=_text.yview)
_text.config(yscrollcommand=_yscrollbar.set)
# 創(chuàng)新開始、停止按鈕
_button_start = Button(root, text="開始轉(zhuǎn)換", command=start_transform_file)
_button_start.grid(row=1, column=1)
# 創(chuàng)建label可變文本,用于動態(tài)更新發(fā)送文件狀態(tài)
global _label_state_text
_label_state_text = StringVar()
_label_state_text.set("待轉(zhuǎn)換")
_label_state = Label(root, textvariable=_label_state_text)
_label_state.grid(row=4, column=0,columnspan=2)
# 顯示窗口
root.mainloop()
(二)使用xlrd2庫讀取excel文件
使用xlrd2庫按行讀取excel文件,讀取表頭、列頭、表數(shù)據(jù),這里需要主要的是最新版本的xlrd不支持xlsx,需要安裝xlrd2才行。
import os
import json
import xlrd2
fileTypeArray = [".xlsx",".xls"]
def readAllExecl():
currentPath = os.getcwd()+"/files"
for dir in [x for x in os.listdir(currentPath)]:
localPath = os.path.join(currentPath, dir)
if os.path.isfile(localPath):
filesp = os.path.splitext(localPath)
for k in fileTypeArray:
if filesp[1] == k:
filename = os.path.basename(localPath)
readExecl(localPath,filename.split('.')[0])
def readExecl(path,name):
workbook = xlrd2.open_workbook(path)
sheet2_name = workbook.sheet_names()[0]
sheet=workbook.sheet_by_name(sheet2_name) # sheet索引從0開始
# sheet的名稱,行數(shù),列數(shù)
adict = {}
for i in range(1,sheet.nrows):
data = {}
for j in range(0,sheet.ncols):
value = TransformationType(sheet.cell_value(i,j))
if isinstance(value , str):
if isJsonString(value):
data[TransformationType(sheet.cell_value(0,j))] = eval(value)
else:
data[TransformationType(sheet.cell_value(0,j))] = value
else:
data[TransformationType(sheet.cell_value(0,j))] = value
adict[TransformationType(sheet.cell_value(i,0))]= data
data = json.dumps(adict,indent=1,ensure_ascii=False)
_json_save_path = os.getcwd() + "/" + name + '.json'
f=open(_json_save_path,'w')
f.write(data)
f.close()
print("already create json:" + path)
return data,_json_save_path
def isJsonString(str):
try:
eval(str)
except Exception as e :
return False
return True
def TransformationType(var):
if isinstance(var ,float) : #type(var) == 'float':
str1 = int(var)
elif isinstance(var, str): #type(var) == 'unicode':
str1 = var
else:
raise Exception("type is not deal")
str1 = var
return str1(三)Python字典格式轉(zhuǎn)json格式
將讀取的excel數(shù)據(jù)存入字典。
adict = {}
for i in range(1,sheet.nrows):
data = {}
for j in range(0,sheet.ncols):
value = TransformationType(sheet.cell_value(i,j))
if isinstance(value , str):
if isJsonString(value):
data[TransformationType(sheet.cell_value(0,j))] = eval(value)
else:
data[TransformationType(sheet.cell_value(0,j))] = value
else:
data[TransformationType(sheet.cell_value(0,j))] = value
adict[TransformationType(sheet.cell_value(i,0))]= data轉(zhuǎn)字典數(shù)據(jù)換成json格式。這里需要注意需要增加ensure_ascii=False參數(shù),否則顯示字符串的時候會出現(xiàn)亂碼。
data = json.dumps(adict,indent=1,ensure_ascii=False)
(四)保存json格式文件并把結(jié)果顯示在界面上
把轉(zhuǎn)換后的json文本顯示到程序界面,文本可拷貝可編輯。
# 點擊,轉(zhuǎn)換文件
def start_transform_file():
global _label_filepath_text,_text,_label_state_text
_file_path = _label_filepath_text.get()
_file_type_list = [".xlsx", ".xls"]
if _file_path is not None:
if os.path.isfile(_file_path):
filesp = os.path.splitext(_file_path)
for k in _file_type_list:
if filesp[1] == k:
filename = os.path.basename(_file_path)
_json_data = excel2json.readExecl(_file_path, filename.split('.')[0])
_text.insert("end",_json_data[0])
_label_state_text.set("轉(zhuǎn)換完畢,json文件存放地址為:"+_json_data[1])到此這篇關(guān)于基于Python實現(xiàn)excel表格數(shù)據(jù)一鍵轉(zhuǎn)json格式小工具的文章就介紹到這了,更多相關(guān)Python excel表格數(shù)據(jù)轉(zhuǎn)json內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- python讀取json數(shù)據(jù)還原表格批量轉(zhuǎn)換成html
- 基于python實現(xiàn)把json數(shù)據(jù)轉(zhuǎn)換成Excel表格
- Python實現(xiàn)讀取Excel表數(shù)據(jù)并轉(zhuǎn)為JSON格式文件
- python中實現(xiàn)json數(shù)據(jù)和類對象相互轉(zhuǎn)化的四種方式
- Python中時間類型的JSON數(shù)據(jù)轉(zhuǎn)換
- 如何使用Python JSON解析和轉(zhuǎn)換數(shù)據(jù)
- Python對象與json數(shù)據(jù)的轉(zhuǎn)換問題實例詳解
相關(guān)文章
python判斷所輸入的任意一個正整數(shù)是否為素數(shù)的兩種方法
今天小編就為大家分享一篇python判斷所輸入的任意一個正整數(shù)是否為素數(shù)的兩種方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-06-06
使用Python腳本從文件讀取數(shù)據(jù)代碼實例
這篇文章主要介紹了使用Python腳本從文件讀取數(shù)據(jù)代碼實例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-01-01
Python繪圖之實現(xiàn)繪制極坐標(biāo)圖像
這篇文章主要介紹了如何利用python繪制極坐標(biāo)圖像,文中的示例代碼講解詳細(xì),具有一定的的參考價值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-08-08
詳解PyCharm使用pyQT5進行GUI開發(fā)的基本流程
本文主要介紹了PyCharm使用pyQT5進行GUI開發(fā)的基本流程,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-10-10
使用python計算方差方式——pandas.series.std()
這篇文章主要介紹了使用python計算方差方式——pandas.series.std(),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-05-05
詳細(xì)介紹在pandas中創(chuàng)建category類型數(shù)據(jù)的幾種方法
這篇文章主要介紹了詳細(xì)介紹在pandas中創(chuàng)建category類型數(shù)據(jù)的幾種方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04

