基于Python实现excel表格数据一键转json格式小工具
作者:神奇的代码在哪里
背景
最近在使用JavaScript编写一些浏览器RPA脚本,脚本使用过程中遇到一些问题,脚本使用的数据往往存放在excel表,但运行时只能读取json数据,导致频繁人工excel转json,效率低下。
遇到问题后赶紧搜索excel转json小工具,发现可以直接使用的工具很少,基本只提供部分代码,而且没有图形化界面。
还是自己动手好玩。本篇文章介绍使用Python开发excel一键转json小工具,实现任意选中excel的xlsx和xls文件转化成json文件,并把结果显示在界面中。
一、excel一键转json小工具使用教程
小工具使用Python Tkinter作为图形GUI,说实话有点难看,但是实用,Window系统直接双击运行即可。
(一)程序运行界面
小工具运行效果,如下图 :
小工具运行效果图
excel转换json前后比对效果,如下图 :
转换前后比对
(二)小工具操作步骤
1)选择需要转换的excel文件,支持xlsx和xls格式,表格尽量简单,暂时不支持复杂嵌套的json格式转换。
选择excel文件
2)点击开始转换,转换后结果显示在界面程序中,可以随时拷贝到其他地方。
开始转换并显示结果
二、源码解析
(一)小工具图形界面设计
小工具界面需要包含excel文件选择点击按钮、转化结果状态显示栏、带滑块的转换结果文本显示区域,如下图设计界面。
这里使用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(): # 创建窗口 root = Tk() # 设置窗口的标题 root.title("excel表格数据转json小工具") root.geometry("720x360") _button = Button(root, text="选择excel文件......", command=open_file) _button.grid(row=1, column=0) # 创建label可变文本,用于动态更新选中的文件路径 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) #创建滑块,并绑定文本框 _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) # 创新开始、停止按钮 _button_start = Button(root, text="开始转换", command=start_transform_file) _button_start.grid(row=1, column=1) # 创建label可变文本,用于动态更新发送文件状态 global _label_state_text _label_state_text = StringVar() _label_state_text.set("待转换") _label_state = Label(root, textvariable=_label_state_text) _label_state.grid(row=4, column=0,columnspan=2) # 显示窗口 root.mainloop()
(二)使用xlrd2库读取excel文件
使用xlrd2库按行读取excel文件,读取表头、列头、表数据,这里需要主要的是最新版本的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的名称,行数,列数 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字典格式转json格式
将读取的excel数据存入字典。
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
转字典数据换成json格式。这里需要注意需要增加ensure_ascii=False参数,否则显示字符串的时候会出现乱码。
data = json.dumps(adict,indent=1,ensure_ascii=False)
(四)保存json格式文件并把结果显示在界面上
把转换后的json文本显示到程序界面,文本可拷贝可编辑。
# 点击,转换文件 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("转换完毕,json文件存放地址为:"+_json_data[1])
到此这篇关于基于Python实现excel表格数据一键转json格式小工具的文章就介绍到这了,更多相关Python excel表格数据转json内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!