背景   

最近在使用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 = Nonedef 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))] = valueelse:data[TransformationType(sheet.cell_value(0,j))] = valueadict[TransformationType(sheet.cell_value(i,0))]= datadata = 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_pathdef isJsonString(str):try:eval(str)except Exception as e :return Falsereturn Truedef TransformationType(var):if isinstance(var ,float) : #type(var) == 'float':str1 = int(var)elif isinstance(var, str): #type(var) == 'unicode':str1 = varelse:raise Exception("type is not deal")str1 = varreturn 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))] = valueelse:data[TransformationType(sheet.cell_value(0,j))] = valueadict[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

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

  1. 【游戏开发】Excel表格批量转换成CSV的小工具

    一.前言 在工作的过程中,我们有时可能会面临将Excel表格转换成CSV格式文件的需求.这尤其在游戏开发中体现的最为明显,策划的数据文档大多是一些Excel表格,且不说这些表格在游戏中读取的速度,但就 ...

  2. Python实现将多个Excel表格数据一键合并到一个表格,轻松提升办公效率!

    老板最近越来越过分了,快下班了发给我几百个表格让我把内容合并到一个表格内去. 还好我会Python,分分钟就搞定了,这要是换个不会Python的,不得加班到第二天天亮去了~ 这么好用的技能,必须分享给 ...

  3. node-xlsx - 简单几行代码处理导入、导出 excel 表格数据,免费开源的 javascript 工具库

    最近开发的项目上需要把数据导出为 xlsx 文档,找了一圈,发现 node-xlsx 简单好用,分享给各位. 关于 node-xlsx 在 web 开发中,管理后台生成 excel 报表并且下载,一个 ...

  4. btcd源码解析——peer节点之间的区块数据同步 (3) —— 非headersFirstMode模式

    文章目录 1. 写在前面 2. 非headersFirstMode模式下的数据同步过程 2.1 peer A 发送"获取区块哈希"的请求 2.2 peer B 响应"获取 ...

  5. python写入excel表格数据绘制图表_(原创)xlsxwriter,python excel 写入数据\图表等操作_图表操作(二)...

    前面分享了使用xlsxwriter创建excel和写入数据GUC:(原创)xlsxwriter,python excel 写入数据\图表等操作_创建.写入(一)​zhuanlan.zhihu.com ...

  6. python读取excel表格数据

    python操作excel主要用到xlrd和xlwt两个库,xlrd读取表格数据,支持xlsx和xls格式的excel表格:xlwt写入excel表格数据 一.python读取excel表格数据 1. ...

  7. Python中ArcPy读取Excel表格数据创建矢量要素图层并生成属性表字段与内容

    1 任务需求   首先,我们来明确一下本文所需实现的需求.   现有一个记录北京市部分PM2.5浓度监测站点信息的Excel表格数据,格式为.xls:文件内包含站点编号.X与Y坐标.站点名称等四列数据 ...

  8. python 显示表格数据_python显示excel表格数据-怎么用python读取excel表格的数据

    怎么用python读取excel表格的数据 #导入包 import xlrd #设置路径 path='C:\\Users\\jyjh\\Desktop\\datap.xlsx' #打开 data=xl ...

  9. 【Unity】安装配置Python使用protobuf转换Excel表格数据并在unit中使用

    前言: 之前使用NPOI插件编写的导表工具,其实就是直接将数据进行序列化,解析时还需要进行反序列化,步骤比较繁复,最近看到Google的一个开源的项目protobuf,不仅可以用于进行excel表格数 ...

最新文章

  1. linux以太网连接树莓派,如何在没有Internet的情况下直接连接到树莓派
  2. 3 张图带你走近蚂蚁mPaaS音视频通话组件
  3. php黄页,PHP 黄页的url
  4. 【java】6个延时队列的实现方案
  5. Android 开发笔记“context和getApplicationContext”
  6. 前端手残党福利(BootstrapCV大法)
  7. windows7计算机启动修复怎么办,Win7电脑开机提示启动修复无法进入系统怎么办?...
  8. 数据挖掘-朴素贝叶斯算法的R实现
  9. 松下GH5相机SD卡格式化后MP4视频碎片重组数据恢复方法
  10. SAP ABAP 数据字典教程 SE11:表、锁定对象、视图和结构 -03
  11. 【枚举算法】佩尔方程
  12. Thread类的interrupt(),interrupted(),isInterrupted()
  13. Android蓝牙开发介绍
  14. RSA对称加密 Util工具类
  15. Leecode- 584. 寻找用户推荐人
  16. 网络安全学习查询黑客
  17. Linux为什么无法进入文件,Linux系统运维之CentOS下提示“无法打开并写入文件”问题解决...
  18. 前OPPO高管王腾,担任小米中国区销售运营一部负责人
  19. 赢在中国史玉柱的点评—史玉柱语录
  20. 二调建设用地地类代码_二调地类代码

热门文章

  1. 6010.Cacti监控CMTS思科uBR7246路由器风扇和电源状态
  2. C++之string类字符串连接
  3. 医学图像处理国际学术会议2021年投稿截止时间及举办时间总结
  4. Virtual PC 修改虚拟机的BIOS
  5. 【Android 插件化】VirtualApp 编译运行 ( VirtualApp 简介 | 配置 VirtualApp 编译环境 | 编译运行 VirtualApp 官方示例 )
  6. Qt实现小球碰撞动画——屏保
  7. “%”取模/取余是不同的
  8. PostgreSQL中的距离计算问题 ST_Length
  9. Laravel5.4注册登录解析及使用教程
  10. photoshop脚本指南_Photoshop礼节:面向设计师的PS工作流程指南