0


Python|excel表格数据一键转json格式小工具|支持xlsx、xls格式转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])

三、下载地址

(一)excel转json小工具.exe,可执行文件下载地址

https://download.csdn.net/download/qq616491978/87097155

(二)excel转json小工具源码下载地址

https://download.csdn.net/download/qq616491978/87097172

标签: excel转json json excel

本文转载自: https://blog.csdn.net/qq616491978/article/details/127896528
版权归原作者 清远小阮 所有, 如有侵权,请联系我们删除。

“Python|excel表格数据一键转json格式小工具|支持xlsx、xls格式转json|【源码+解析】”的评论:

还没有评论