美文网首页@IT·互联网
Excel2Json 工具 可以区分客户端和服务器导出JSON文

Excel2Json 工具 可以区分客户端和服务器导出JSON文

作者: 勇于改变 | 来源:发表于2020-10-20 20:06 被阅读0次

        用python写了个 excel转换成json的工具,源码如下:

    '''

    excel转换成json文件的工具 支持文件格式*.xlsx 和 *.xls 导出文件为utf-8编码

    1.里面每一个工作表代表一张配表,格式是中文解释|配表名称 比如:商店道具|Shop 

    2.配表格式前四行有固定格式,

    第一行 代表配表里面的名字(程序用,采用驼峰命名方式,第一个单词小写,接第二个单词的时候首字母大写)

    第二行 类型(int、string、number、int[]、string[]、number[]、)  、

    第三行 前后端标识-只有前端用c 只有后端用s 前后端都用 cs 例如:c 或s 或cs

    第四行 注释

    3.第五行开始为配表数据,首列定义为int、id 并且id自增格式。

    4.int类型只能为整数(没有小数),number类型为浮点数,可以有小数,string可以有中文英文数字,数组类型 int[]、number[]、string[]分别对应整数数组、浮点数数组、字符串数组,用英文逗号分开

    比如:int型数组(int[] ):1,2,3

    浮点型数组(number[]):1.222,3.222

    字符串数组(string[]):大牛,二狗

    '''

    import tkinter as tk

    from tkinter import filedialog

    from tkinter import Button

    from tkinter import StringVar

    from tkinter import Checkbutton

    from tkinter import IntVar

    # from tkinter import *

    import xlrd

    import os

    # 导出文件的目录默认当前目录

    outDirector = '.'

    # 根据类型解析数据

    # 支持数据类型 int,number,string,int[],number[],string[]

    def jiexi(ktype,value):

    # print("> 解析字段:",ktype,value)

    result = ""

    if ktype == "int":

    result = str(value).split(".")[0]

    elif ktype == "string":

    result = '\"'+value+'\"'

    elif ktype == "number":

    result = value

    else:

    # 解析数组

    if ktype.find("[]") >-1:

    arrKey = ktype.split("[]")

    valueArr = str(value).split(",")

    # print("arrKey",arrKey,valueArr)

    result = "["

    for k in range(len(valueArr)):

    result = result+jiexi(arrKey[0],valueArr[k])+","

    result = result[0:-1]

    result = result+"]"

    # print("reuslt:",result)

    else:

    print("## error key",ktype)

    # print("解析结果:",result)

    return str(result)

    # 解析表单

    # sheet 表单

    # @flg 标识 c 客户端 s 服务器

    def readSheet(sheet,flg):

    # 解析表名称

    nameArray = sheet.name.split("|")

    if(len(nameArray)==2):

    fileName = nameArray[1]

    fileContent = "{\n"

    print(" ")

    print("开始解析表格:",fileName)

    print("                  ")

    # 字段类型

    types = []

    # 字段名称

    valueKey = []

    # 前后端标识

    flgKey = []

    for i in range(sheet.nrows):

    # 每一行的数据

    row = sheet.row_values(i)

    if(i!=3):

    if(i == 1):

    types = row

    elif(i == 2):

    flgKey = row

    elif(i == 0):

    valueKey = row

    else:

    # print("解析:",row)

    blockItem = ""

    for j in range(len(types)):

    # print("*",j)

    if j== 0:

    value = row[j]

    # 每一行唯一索引

    blockItem = ' \"'+jiexi("int",row[0])+'\":{\n'

    # print("**",value)

    else:

    if(flgKey[j].find(flg) == -1):

    continue

    # 字段类型

    keyType = types[j]

    # 字段数值

    value = row[j]

    # 字段解析后的数据

    keyContent = jiexi(keyType,value)

    # print("***",j,keyType,value,keyContent)

    # 最后一项不要逗号

    dohao = ","

    if(j == len(types)-1):

    dohao = ""

    blockItem = blockItem+' \"'+valueKey[j]+'\":'+keyContent+dohao+"\n\n"

    blockItem = blockItem[0:-1]

    blockItem = blockItem+" },\n"

    fileContent = fileContent+blockItem

    # print("------------- 解析一行结束------",blockItem)

    # fileContent = fileContent + "}"

    # print(">>",i,row)

    # 去掉最后两个字符

    fileContent = fileContent[0:-2]

    fileContent = fileContent+"\n}"

    print("save file:",'\n'+fileContent)

    # 保存文件

    global outDirector

    flagDir = "client"

    if flg == "s":

    flagDir = "server"

    outpath = outDirector+"/"+flagDir

    if(not os.path.exists(outpath)):

    os.makedirs(outpath)

    outpath = outpath+"/"+fileName+".json"

    # log("savefile:"+outpath)

    fp = open(outpath,"w",encoding='utf-8')

    fp.write(fileContent)

    fp.close()

    log("导出成功。")

    # print("生成配表:",fileContent)

    else:

    print(nameArray,"error")

    # 执行转换

    def doExcel2Json(file):

    # book = xlrd.open_workbook("./data.xlsx")

    book = xlrd.open_workbook(file)

    # 导出服务器配表复选框

    global serverFlg

    # 导出客户端配表复选框

    global clientFlg

    # 获取工作表名称

    for sheet in book.sheets():

    # print("ggg",sheet.name)

    if clientFlg.get()==1:

    readSheet(sheet,"c")

    if serverFlg.get()==1:

    readSheet(sheet,"s")

    # doExcel2Json("./data.xlsx")

    # 打开文件选择对话框

    window = tk.Tk()

    window.title("excel转换json工具")

    window.geometry('400x300')

    # window.withdraw()

    # 打印信息到窗口

    def log(str):

    global show_str

    show_str.set(str)

    # w = tk.Label(window, text=str)

    # w.pack()

    # global text

    # text.insert(tk.INSERT,str+"\r\n")

    # text.pack()

    # window.mainloop()

    # print(str)

    # 选择导出文件夹名称

    def selectOutDirFun():

    global outDirector

    outDirector = filedialog.askdirectory()

    if outDirector:

    log("导出到目录:"+outDirector)

    else:

    outDirector = "."

    log("没有选择目录,默认导出到当前目录")

    # 选择要转换的excel文件

    def selectExcelFileFun():

    filePath = filedialog.askopenfilename()

    if filePath:

    if filePath.find(".xlsx")>-1:

    doExcel2Json(filePath)

    print("ok")

    elif filePath.find(".xls")>-1:

    doExcel2Json(filePath)

    print("ok1")

    else:

    print("无法转换此类文件")

    print("打开文件:",filePath)

    clientFlg = IntVar()

    serverFlg = IntVar()

    checkClient = Checkbutton(window,text="客户端",variable=clientFlg)

    checkClient.select()

    checkClient.pack()

    checkServer = Checkbutton(window,text="服务器",variable=serverFlg)

    checkServer.pack()

    b = Button(window,text='选择导出目录',command=selectOutDirFun)

    b.place(y=10)

    b.pack()

    w = tk.Label(window, text="")

    w.pack()

    c = Button(window,text="选择excel文件",command=selectExcelFileFun)

    c.pack()

    w = tk.Label(window, text="")

    w.pack()

    show_str = StringVar(window)

    show_str.set("使用说明:第一步:点击【选择导出目录】按钮选择json文件存储位置\n 第二步:点击【选择excel文件】按钮,选择要转换的excel文件\n 第三步:导出成功")

    ww = tk.Label(window,textvariable=show_str)

    # cc= tk.Label(window, textvariable=show_str)

    # ww.place(x=0,y=30)

    ww.pack()

    window.mainloop()

    # print(dir(tk))

    项目地址:https://gitee.com/fengfengaihuohuo/excel2-json

    说明文档:README.md

    exe地址:excel2json.exe

    有需要的同学直接拿走,如果觉得对自己有用,可以给作者个,谢谢大家。

    相关文章

      网友评论

        本文标题:Excel2Json 工具 可以区分客户端和服务器导出JSON文

        本文链接:https://www.haomeiwen.com/subject/nfqjmktx.html