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

news2025/1/7 10:46:27

背景   

        最近在使用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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/28585.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于PHP+MySQL药品信息查询系统(含论文)

本系统阐述了医药信息查询系统的开发过程,并对该系统的需求分析及系统需要实现的设计方法作了介绍。该系统的基本功能包括用户注册登录,查看医药资讯,医药查询和在线留言等信息。 本系统技术介绍:php,mysql,apache,notepad,sublime.运行环境wamp,PHPstudy,xammp等php集成环境. …

FastAPI使用typing类型提示

typing是Python标准库,用来做类型提示。FastAPI使用typing做了: 编辑器支持; 类型检查; 定义类型,request path parameters, query parameters, headers, bodies, dependencies等等; 类型转换&#xff1…

去中心化应用的终极是应用链?

互操作性是近期在Web3兴起的概念,是指不同的计算机系统、网络、操作系统和应用程序一起工作并共享信息的能力。随着链上通信、语义交互逐渐复杂,链上用户多样的需求已然超出应用在单条链可承受的技术能力。 原本视作创新实验的Web3应用逐渐被公众接纳&am…

初识变量和数据类型

JavaScript第2天 输入输出语句 输出语句 alert(变量) > 弹出document.write(变量) > 输出在页面上面console.log(变量) > 打印在控制台上 /* JS的输出语句 */ alert("弹出") document.write("直接在写页面上面") console.log("打印在控制…

MacOS 如何选择鼠标不飘滚动平滑

MacOS 如何选择鼠标不飘滚动平滑 前言 今天不务正业的聊聊 macos 下的鼠标的事情,群里也有朋友和我聊,正好说说这事。 我在很长的时间里都在用 macbook pro 的触控板 键盘的高效模式,因为触控板和键盘很近所以效率很高。 但是有一个问题就是…

set和multiset容器

1、基本概念 所有元素在插入时会自动排好序&#xff1b; 属于关联式容器&#xff0c;底层结构是用二叉树实现的 2、set和multiset的区别 set中不允许有重复元素&#xff0c;multiset允许有重复元素。 3、构造和赋值 构造&#xff1a; set<T>st; //默认构造 set&l…

Linux | 进程间通信 | 匿名管道 | 命名管道 | 模拟代码实现进程通信

文章目录进程通信的意义匿名管道通信原理管道的访问控制进程控制管道的特点命名管道进程通信的意义 之前聊进程时&#xff0c;讲过一个性质&#xff0c;即进程具有独立性&#xff0c;两个进程之间的交互频率是比较少的。就连父子进程也只是共享代码&#xff0c;修改父子进程中…

小程序云开发笔记一

一、什么是云开发&#xff1f; 微信官方云原生开发平台&#xff0c;腾讯云的各种能力加持&#xff0c;用云开发开发者可以节省大量的开发时间和运维成本。 二、云开发优势 无需运维&#xff0c;数据变大不需要管理&#xff0c; 弹性伸缩&#xff0c;业务量变大&#xff0c;服…

在一台电脑上安装多个python版本(小白教程)

我自己的办公电脑是64位&#xff0c;好几个同事的电脑还是win7&#xff0c;32位&#xff0c;因此我在写python办公自动化的时候还要考虑32位的python&#xff0c;因此在电脑上安装了两个版本的python&#xff0c;方便测试、打包使用 1、首先&#xff0c;下载两个python&#xf…

代码随想录算法训练营第七天|LeetCode 454. 四数相加 II 、383. 赎金信、 15. 三数之和、18. 四数之和

LeetCode 454. 四数相加 II 题目链接&#xff1a;454. 四数相加 II 分析&#xff1a; 本题比较简单&#xff0c;因为是无关的四个数组&#xff0c;所以不需要考虑去重&#xff0c;所以用哈希比较简单 思路&#xff1a; 定义个无序map先将nums1和nums2的和的数都存进去&…

单目标应用:世界杯优化算法(World Cup Optimization,WCO)求解单仓库多旅行商问题SD-MTSP(可更改旅行商个数及起点)

一、世界杯优化算法 世界杯优化算法&#xff08;World Cup Optimization&#xff0c;WCO)由Navid Razmjooy等人于2016年提出&#xff0c;该算法模拟了国际足联世界杯比赛&#xff0c;思路新颖&#xff0c;收敛速度快&#xff0c;全局寻优能力强。 算法原理参考&#xff1a;智…

[附源码]java毕业设计学生宿舍管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

新型智能优化算法——海鸥优化算法(基于Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客 &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜…

基于莱维飞行扰动策略的麻雀搜索算法(ISSA)(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客 &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜…

【强化学习论文合集】ICML-2022 强化学习论文 | 2022年合集(二)

强化学习(Reinforcement Learning, RL),又称再励学习、评价学习或增强学习,是机器学习的范式和方法论之一,用于描述和解决智能体(agent)在与环境的交互过程中通过学习策略以达成回报最大化或实现特定目标的问题。 本专栏整理了近几年国际顶级会议中,涉及强化学习(Rein…

[附源码]java毕业设计校园摄影爱好者交流网站

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

elasticsearch bucket 之rare terms聚合

文章目录1、背景2、需求3、前置准备3.1 准备mapping3.2 准备数据4、实现需求4.1 dsl4.2 java代码4.3 运行结果5、max_doc_count 和 search.max_buckets6、注意事项7、完整代码8、参考文档1、背景 我们知道当我们使用 terms聚合时&#xff0c;当修改默认顺序为_count asc时&…

nodejs+mysql+vscode网上图书商城销售管理系统vue

当前社会是一个网络高度发达的社会&#xff0c;人们都处在互联网时代中&#xff0c;对于知识的获取都是通过互联网&#xff0c;为了鼓励人们积极获取纸质知识&#xff0c;我想要设计一个网上图书售卖系统。这个系统设计的目的是为了方便人们们作为参考资料. 网上图书管理系统的…

【31-业务开发-基础业务-品牌管理-级联类别信息业务功能实现-品牌管理和商品分类管理俩者业务关联出现数据冗余,导致数据不同步的问题-开启事务-项目测试】

一.知识回顾 【0.三高商城系统的专题专栏都帮你整理好了&#xff0c;请点击这里&#xff01;】 【1-系统架构演进过程】 【2-微服务系统架构需求】 【3-高性能、高并发、高可用的三高商城系统项目介绍】 【4-Linux云服务器上安装Docker】 【5-Docker安装部署MySQL和Redis服务】…

进 4 球得 1 分,阿根廷败北背后的科技与狠活

内容一览&#xff1a;11 月 22 日&#xff0c;世界杯 C 组首场比赛&#xff0c;沙特阿拉伯 2:1 反超阿根廷&#xff0c;今天我们将逐一盘点阿根廷进 4 球得 1 分背后的科技与狠活。 关键词&#xff1a;世界杯 VAR 半自动越位技术 沙特爆冷逆袭&#xff0c;2:1 反超阿根廷 2022…