使用python做一个分割excel的小工具

2,382 阅读1分钟

摘要 需求来源于一个会计工作的朋友,说要处理excel表,按照公司名称把相同的公司条目放一个里,将整个大表拆分成多个表,由于数据庞大,手动去拆分很麻烦,就问我能解决么。动手调用pandas库,几行代码就解决了,又考虑到要给别人用,没有python环境,所以决定写出图形界面,打包成exe文件给其他人用。代码并不多,初次使用图形界面,就做一个记录。

需要安装的python库

pip install pandas 用于处理csv文件

pip install pyinstaller 用于打包python文件为exe文件 pyinstaller -F mycript.py

图形界面程序设计

  • UI:各种组件,搭建界面

  • ui_updata:获取用户输入数据和在界面输出数据

  • business:事件处理

源码

import pandas as pd
from tkinter import *
from tkinter.filedialog import *

info = {
    'path':'',
    'group':'',
    'epath':''
}

# ui
def make_app():
    app = Tk()
    Label(app,text='Excel tool').pack()
    e = StringVar()  # 字符串钩子,可以用e.get()取输入数据
    Entry(app,name = 'entry',textvariable=e ,width=70).pack()
    e.set("请先输入分割依据(列名)")
    a = StringVar()  # 字符串钩子
    Entry(app,name = 'epath',textvariable=a ,width=70).pack()
    a.set("请输入分割后的文件保存路径例如E:\output\\")
    Listbox(app,name='lbox', bg='#f2f2f2').pack(fill=BOTH, expand=True)
    Button(app,text='选择文件',command=ui_getdata).pack()
    Button(app,text='开始分割',command=part ).pack()
    app.geometry('300x400')
    return app

# ui_updata
def ui_getdata():
    f_name = askopenfilename()
    lbox = app.children['lbox']
    entry =app.children['entry']
    epath = app.children['epath']
    info['path'] = f_name
    info['group'] = entry.get()
    info['epath'] = epath.get()
    lbox.insert(END, '文件名:'+f_name.split('/')[-1])
    lbox.insert(END, '分割依据(列名):'+entry.get())
    lbox.insert(END, '保存路径 :' + epath.get())

# business
def part():
    name = info['path']
    data = pd.read_csv(name,encoding = 'gb18030')
    # print('数据的形状:', data.shape)
    # 分组依据,按某列索引名称分组
    group_o= data.groupby(by= info['group'])
    # 保存各个分组
    for name,group in group_o:
       group.to_csv(info['epath']+name+'.csv', index=None, encoding='gb18030')



app = make_app()
app.mainloop()

运行结果