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

2023-11-09

背景   

        最近在使用JavaScript编写一些浏览器RPA脚本,脚本使用过程中遇到一些问题,脚本使用的数据往往存放在excel表,但运行时只能读取json数据,导致频繁人工exceljson,效率低下。

        遇到问题后赶紧搜索exceljson小工具,发现可以直接使用的工具很少,基本只提供部分代码,而且没有图形化界面。

        还是自己动手好玩。本篇文章介绍使用Python开发excel一键转json小工具,实现任意选中excelxlsxxls文件转化成json文件,并把结果显示在界面中。


目录

                    一、使用教程

二、源码解析

三、下载地址


一、excel一键转json小工具使用教程

         小工具使用Python Tkinter作为图形GUI,说实话有点难看,但是实用,Window系统直接双击运行即可。

(一)程序运行界面

        小工具运行效果,如下图 : 

小工具运行效果图

        excel转换json前后比对效果,如下图 :        

转换前后比对

         

         (二)小工具操作步骤

        1)选择需要转换的excel文件,支持xlsxxls格式,表格尽量简单,暂时不支持复杂嵌套的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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python|excel表格数据一键转json格式小工具|支持xlsx、xls格式转json|【源码+解析】 的相关文章

随机推荐

  • Java复习-20-接口(2)- 工厂设计模式

    工厂设计模式 Factory 观察如下例子 食物接口 所有食物都应该能够食用 但食用方式不同 因此包含抽象方法 eat 面包子类 实现食物接口 实现接口中的 eat 方法 吃面包 牛奶子类 实现食物接口 实现接口中的 eat 方法 喝牛奶
  • 方法(函数)数组

    方法 函数 数组 概念 方法 也叫函数 但是一般在java中都叫方法 可以看成是一个可以完成独立功能的代码块 可以反复使用 每次使用都是独立的 存在于类的结构体 作用 完成功能 数据的处理 方法可以拿来反复使用 每次使用都是独立的 publ
  • 构建更加灵活的IIoT解决方案

    Softing的dataFEED系列edgeConnector产品现在支持MQTT subscriber功能 从而支持与物联网云或物联网边缘应用的双向通信 Softing edgeConnector产品的新版本2 31现在支持MQTT su
  • Bootstrap的基本使用方法,5分钟帮你搞懂怎么用

    作为Coder 我们都接触过Web design 如何快速的构建Web应用成了我们比较头疼的一个问题 不仅要考虑各种浏览器的兼容性 同时还要考虑各种手机的页面适配 毕竟现在已经到了互联网手机满天飞的时代了 我有会听嵩哥的歌 对 唱歌的那位
  • 【转载】VB滚轮插件(win7 64位)

    在五楼的时候电脑里的VB都已经预装好了滚轮插件了 这次下四楼用自己的电脑才发现那么一个小小的东西真心很方便 想安装一个 按照网上的教程发现了一点点小问题 最后当然完美解决啦 分享一下 已经知道的童鞋呢 忽略就好啦 首先 请看一篇转帖 看不看
  • GPT3.5 VS GPT-4写领导讲话稿,谁是最强笔杆子?

    正文共 1240 字 阅读大约需要 5 分钟 文秘 公务员必备技巧 您将在5分钟后获得以下超能力 快速生成领导讲话稿 Beezy评级 B级 经过简单的寻找 大部分人能立刻掌握 主要节省时间 推荐人 Kim 编辑者 Linda 图片由Lexi
  • 钢条切割(dp解法)

    1 问题描述 Serling公司购买长钢条 将其切割为短钢条出售 切割工序本身没有成本支出 公司管理层希望知道最佳的切割方案 假定我们知道Serling公司出售一段长为i英寸的钢条的价格为pi i 1 2 单位为美元 钢条的长度均为整英寸
  • 无法打开包括文件:“QtNetwork”: No such file or directory

    QTCN社区 gt Qt基础编程 gt fatal error C1083 无法打开包括文件 QtNetwork No such file or directory 打印本页 登录 注册 回复主题 发表主题 zhubangbing 2008
  • docker安装mysql

    拉取mysql镜像 docker pull mysql 5 7 启动 docker run itd name mysql p 3307 3306 e MYSQL ROOT PASSWORD root mysql 5 7
  • 自组织特征映射网络(SOFM)

    1 SOFM简介 自组织特征映射网络SOFM又称自组织映射网络SOM 是一种自组织竞争神经网络 一个神经网络接受外界输入模式时 将会分为不同的对应区域 各区域对输入模式具有不同的响应特征 而且这个过程是自动完成的 其特点与人脑的自组织特性相
  • Ocaml——Let

    1 并行定义 如果这个变量在并行定义之前没有定义过 那么会出现变量无定义的错误 例如 2 Let局部定义 语法格式如下 let lt 变量 gt lt 表达式1 gt in lt 表达式2 gt 在这个格式中 变量不再是全局有效的变量 他的
  • linux 系统启动盘制作方式

    文章目录 linux 系统启动盘制作方式 制作镜像 制作系统盘 linux 系统启动盘制作方式 制作镜像 解压iso 一定要带着 discinfo productinfo treeinfo 在替换的软件包的Packages 同级目录执行 c
  • 根据获取的经纬度查询用户位置的距离

    在实现需求的时候难免会遇到根据经纬度要获取距离用户定位的位置的距离 今天就跟大家介绍一下怎么使用sql语句获取到距离用户定位位置的距离 要获取用户位置跟店铺的距离需要一些必要参数 第一 必须要获取到用户定位的经纬度 第二必须要有你要查询距离
  • WEB漏洞测试——HTML注入及XSS注入

    HTML注入 原理 目前我们所接触展示页面基本上都是由html来实现的 那么后台在处理内容的时候 是对html很少处理的 如果用户刻意通过输入框 文本框 查询框来填写html js代码 脚本注入 那么就会造成漏洞 若填写恶意网站 病毒网站
  • 基于Qt开发的游戏手柄小程序例子

    以前做过一个项目 用游戏手柄链接上位机软件 控制下位机执行一些机械动作 现在我将手柄控制的功能单独拿出来做了一个手柄检测的小程序 供开发者们拿去移植到自己的项目中用 这个程序是用 Qt creator5 12开发环境开发的 不过移植到VS
  • idea配置hibernate环境-零基础入门-详细版

    idea配置hibernate环境 下载hibernate所需jar包 官网链接 高速链接 用idea创建一个web项目 Create New Project gt 选择Java Enterprise gt 勾选Web Applicatio
  • 嵌入式毕设分享 STM32与wifi的天气预报网时钟系统

    文章目录 0 前言 1 设计内容 2 软件设计 3 关键代码 4 最后 0 前言 这两年开始毕业设计和毕业答辩的要求和难度不断提升 传统的毕设题目缺少创新和亮点 往往达不到毕业答辩的要求 这两年不断有学弟学妹告诉学长自己做的项目系统达不到老
  • 基于FPGA的正弦波发生器设计与实现

    基于FPGA的正弦波发生器设计与实现 摘要 本文介绍了一种基于FPGA的正弦波发生器的设计与实现 通过使用FPGA的数字信号处理功能 可以实现高精度 高性能的正弦波生成 文章首先介绍了DDS Direct Digital Synthesis
  • 《如何为Android Studio安装HAXM》

    Preface 1 Intel HAXM Hardware Accelerated Execution Manager 即英特尔硬件加速执行管理器 Intel HAXM 是一款硬件辅助虚拟引擎 管理程序 使用基于 Intel R Virtu
  • Python|excel表格数据一键转json格式小工具|支持xlsx、xls格式转json|【源码+解析】

    背景 最近在使用JavaScript编写一些浏览器RPA脚本 脚本使用过程中遇到一些问题 脚本使用的数据往往存放在excel表 但运行时只能读取json数据 导致频繁人工excel转json 效率低下 遇到问题后赶紧搜索excel转json