欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

基于Python實現(xiàn)excel表格數(shù)據(jù)一鍵轉(zhuǎn)json格式小工具

 更新時間:2025年09月05日 10:31:14   作者:神奇的代碼在哪里  
這篇文章主要為大家詳細(xì)介紹了如何使用Python開發(fā)excel一鍵轉(zhuǎn)json小工具,實現(xiàn)任意選中excel的xlsx和xls文件轉(zhuǎn)化成json文件,并把結(jié)果顯示在界面中,需要的可以了解下

背景   

最近在使用JavaScript編寫一些瀏覽器RPA腳本,腳本使用過程中遇到一些問題,腳本使用的數(shù)據(jù)往往存放在excel表,但運行時只能讀取json數(shù)據(jù),導(dǎo)致頻繁人工excel轉(zhuǎn)json,效率低下。

遇到問題后趕緊搜索excel轉(zhuǎn)json小工具,發(fā)現(xiàn)可以直接使用的工具很少,基本只提供部分代碼,而且沒有圖形化界面。

還是自己動手好玩。本篇文章介紹使用Python開發(fā)excel一鍵轉(zhuǎn)json小工具,實現(xiàn)任意選中excelxlsxxls文件轉(zhuǎn)化成json文件,并把結(jié)果顯示在界面中。

一、excel一鍵轉(zhuǎn)json小工具使用教程

小工具使用Python Tkinter作為圖形GUI,說實話有點難看,但是實用,Window系統(tǒng)直接雙擊運行即可。

(一)程序運行界面

小工具運行效果,如下圖 :

小工具運行效果圖

excel轉(zhuǎn)換json前后比對效果,如下圖 :   

轉(zhuǎn)換前后比對

 (二)小工具操作步驟

1)選擇需要轉(zhuǎn)換的excel文件,支持xlsxxls格式,表格盡量簡單,暫時不支持復(fù)雜嵌套的json格式轉(zhuǎn)換。

選擇excel文件

2)點擊開始轉(zhuǎn)換,轉(zhuǎn)換后結(jié)果顯示在界面程序中,可以隨時拷貝到其他地方。

開始轉(zhuǎn)換并顯示結(jié)果

二、源碼解析

(一)小工具圖形界面設(shè)計

小工具界面需要包含excel文件選擇點擊按鈕、轉(zhuǎn)化結(jié)果狀態(tài)顯示欄、帶滑塊的轉(zhuǎn)換結(jié)果文本顯示區(qū)域,如下圖設(shè)計界面。

這里使用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():
    # 創(chuàng)建窗口
    root = Tk()
    # 設(shè)置窗口的標(biāo)題
    root.title("excel表格數(shù)據(jù)轉(zhuǎn)json小工具")
    root.geometry("720x360")

    _button = Button(root, text="選擇excel文件......", command=open_file)
    _button.grid(row=1, column=0)
    # 創(chuàng)建label可變文本,用于動態(tài)更新選中的文件路徑
    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)

    #創(chuàng)建滑塊,并綁定文本框
    _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)


    # 創(chuàng)新開始、停止按鈕
    _button_start = Button(root, text="開始轉(zhuǎn)換", command=start_transform_file)
    _button_start.grid(row=1, column=1)
    # 創(chuàng)建label可變文本,用于動態(tài)更新發(fā)送文件狀態(tài)
    global _label_state_text
    _label_state_text = StringVar()
    _label_state_text.set("待轉(zhuǎn)換")
    _label_state = Label(root, textvariable=_label_state_text)
    _label_state.grid(row=4, column=0,columnspan=2)
    # 顯示窗口
    root.mainloop()

(二)使用xlrd2庫讀取excel文件

使用xlrd2庫按行讀取excel文件,讀取表頭、列頭、表數(shù)據(jù),這里需要主要的是最新版本的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的名稱,行數(shù),列數(shù)

    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字典格式轉(zhuǎn)json格式

將讀取的excel數(shù)據(jù)存入字典。

    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

轉(zhuǎn)字典數(shù)據(jù)換成json格式。這里需要注意需要增加ensure_ascii=False參數(shù),否則顯示字符串的時候會出現(xiàn)亂碼。

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

(四)保存json格式文件并把結(jié)果顯示在界面上

把轉(zhuǎn)換后的json文本顯示到程序界面,文本可拷貝可編輯。

# 點擊,轉(zhuǎn)換文件
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("轉(zhuǎn)換完畢,json文件存放地址為:"+_json_data[1])

到此這篇關(guān)于基于Python實現(xiàn)excel表格數(shù)據(jù)一鍵轉(zhuǎn)json格式小工具的文章就介紹到這了,更多相關(guān)Python excel表格數(shù)據(jù)轉(zhuǎn)json內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論