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

背景   

        定制开发最近在使用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布局,代码如下:

  1. from tkinter import Tk, Label, Button, StringVar, filedialog, Text, Scrollbar
  2. # 显示文件路径组件,_label_filepath_text为文件路径
  3. _label_filepath_text = None
  4. _text = None
  5. _label_state_text = None
  6. def open_window():
  7. # 创建窗口
  8. root = Tk()
  9. # 设置窗口的标题
  10. root.title("excel表格数据转json小工具")
  11. root.geometry("720x360")
  12. _button = Button(root, text="选择excel文件......", command=open_file)
  13. _button.grid(row=1, column=0)
  14. # 创建label可变文本,用于动态更新选中的文件路径
  15. global _label_filepath_text,_text
  16. _label_filepath_text = StringVar()
  17. _label_filepath = Label(root, textvariable=_label_filepath_text)
  18. _label_filepath.grid(row=2, column=0,columnspan=2)
  19. #创建滑块,并绑定文本框
  20. _yscrollbar = Scrollbar(root)
  21. _yscrollbar.grid(row=3,column=3,sticky="NS")
  22. _text = Text(root,height=21,width=99)
  23. _text.grid(row=3,column=0,columnspan=2)
  24. _yscrollbar.config(command=_text.yview)
  25. _text.config(yscrollcommand=_yscrollbar.set)
  26. # 创新开始、停止按钮
  27. _button_start = Button(root, text="开始转换", command=start_transform_file)
  28. _button_start.grid(row=1, column=1)
  29. # 创建label可变文本,用于动态更新发送文件状态
  30. global _label_state_text
  31. _label_state_text = StringVar()
  32. _label_state_text.set("待转换")
  33. _label_state = Label(root, textvariable=_label_state_text)
  34. _label_state.grid(row=4, column=0,columnspan=2)
  35. # 显示窗口
  36. root.mainloop()

(二)使用xlrd2库读取excel文件

        使用xlrd2库按行读取excel文件,读取表头、列头、表数据,这里需要主要的是最新版本的xlrd不支持xlsx,需要安装xlrd2才行。

  1. import os
  2. import json
  3. import xlrd2
  4. fileTypeArray = [".xlsx",".xls"]
  5. def readAllExecl():
  6. currentPath = os.getcwd()+"/files"
  7. for dir in [x for x in os.listdir(currentPath)]:
  8. localPath = os.path.join(currentPath, dir)
  9. if os.path.isfile(localPath):
  10. filesp = os.path.splitext(localPath)
  11. for k in fileTypeArray:
  12. if filesp[1] == k:
  13. filename = os.path.basename(localPath)
  14. readExecl(localPath,filename.split('.')[0])
  15. def readExecl(path,name):
  16. workbook = xlrd2.open_workbook(path)
  17. sheet2_name = workbook.sheet_names()[0]
  18. sheet=workbook.sheet_by_name(sheet2_name) # sheet索引从0开始
  19. # sheet的名称,行数,列数
  20. adict = {}
  21. for i in range(1,sheet.nrows):
  22. data = {}
  23. for j in range(0,sheet.ncols):
  24. value = TransformationType(sheet.cell_value(i,j))
  25. if isinstance(value , str):
  26. if isJsonString(value):
  27. data[TransformationType(sheet.cell_value(0,j))] = eval(value)
  28. else:
  29. data[TransformationType(sheet.cell_value(0,j))] = value
  30. else:
  31. data[TransformationType(sheet.cell_value(0,j))] = value
  32. adict[TransformationType(sheet.cell_value(i,0))]= data
  33. data = json.dumps(adict,indent=1,ensure_ascii=False)
  34. _json_save_path = os.getcwd() + "/" + name + '.json'
  35. f=open(_json_save_path,'w')
  36. f.write(data)
  37. f.close()
  38. print("already create json:" + path)
  39. return data,_json_save_path
  40. def isJsonString(str):
  41. try:
  42. eval(str)
  43. except Exception as e :
  44. return False
  45. return True
  46. def TransformationType(var):
  47. if isinstance(var ,float) : #type(var) == 'float':
  48. str1 = int(var)
  49. elif isinstance(var, str): #type(var) == 'unicode':
  50. str1 = var
  51. else:
  52. raise Exception("type is not deal")
  53. str1 = var
  54. return str1

(三)Python字典格式转json格式

        将读取的excel数据存入字典。

  1. adict = {}
  2. for i in range(1,sheet.nrows):
  3. data = {}
  4. for j in range(0,sheet.ncols):
  5. value = TransformationType(sheet.cell_value(i,j))
  6. if isinstance(value , str):
  7. if isJsonString(value):
  8. data[TransformationType(sheet.cell_value(0,j))] = eval(value)
  9. else:
  10. data[TransformationType(sheet.cell_value(0,j))] = value
  11. else:
  12. data[TransformationType(sheet.cell_value(0,j))] = value
  13. adict[TransformationType(sheet.cell_value(i,0))]= data

         转字典数据换成json格式。这里需要注意需要增加ensure_ascii=False参数,否则显示字符串的时候会出现乱码

data = json.dumps(adict,indent=1,ensure_ascii=False)

(四)保存json格式文件并把结果显示在界面上

        把转换后的json文本显示到程序界面,文本可拷贝可编辑。

  1. # 点击,转换文件
  2. def start_transform_file():
  3. global _label_filepath_text,_text,_label_state_text
  4. _file_path = _label_filepath_text.get()
  5. _file_type_list = [".xlsx", ".xls"]
  6. if _file_path is not None:
  7. if os.path.isfile(_file_path):
  8. filesp = os.path.splitext(_file_path)
  9. for k in _file_type_list:
  10. if filesp[1] == k:
  11. filename = os.path.basename(_file_path)
  12. _json_data = excel2json.readExecl(_file_path, filename.split('.')[0])
  13. _text.insert("end",_json_data[0])
  14. _label_state_text.set("转换完毕,json文件存放地址为:"+_json_data[1])

三、下载地址

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

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

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发