前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Excel合并小工具编写

Excel合并小工具编写

作者头像
zx钟
发布2020-04-26 13:41:17
7540
发布2020-04-26 13:41:17
举报
文章被收录于专栏:测试游记测试游记

由于女朋友太懒,又要让我干活,所以写一个简单的Excel合并小工具来帮她合并一下Excel。

待合并excel

需求分析

由于从数据库导出来的数据过大,所以默认被分成了多个Sheet,现在的需要「将他们合并在一起进行数据透视操作」。

使用到的库

代码语言:javascript
复制
import os
import threading
from tkinter import *
import pandas as pd
  1. os:文件操作,方便进行文件名的修改等操作
  2. threading:线程模块,可以方便进行多线程操作
  3. tkinter:python自带的GUI界面
  4. pandas:Excel数据处理的主力

还用到了pyinstaller来进行打包,方便后续使用

合并流程

合并可以分为:

  • 读取Excel各Sheet内容
  • 进行组合
  • 写入新的Excel中

读取

入参为pathname,方便动态调整

代码语言:javascript
复制
def get_df(path, name):
    df = pd.DataFrame(pd.read_excel(path, sheet_name=name))
    return df

合并

由于怕合并少了,所以计算一下每个Sheet中内容条数合并后的内容条数

代码语言:javascript
复制
def concat_df(df_list):
    sum = 0
    for i in df_list:
        sum += len(i)
        print(len(i))
    result = pd.concat(df_list, sort=False)
    print(f'理论上合并后条数为{sum},实际为{len(result)}')
    return result

写入

代码语言:javascript
复制
def write_into_xls(result, file_name='result.xls'):
    writer = pd.ExcelWriter(file_name)
    result.to_excel(writer, index=False)
    writer.save()

流程组合

通过os模块裁剪传入的excel文件路径,进行拆分重组

代码语言:javascript
复制
p, name = os.path.split(file_path)
_, n = os.path.splitext(file_path)
new_path = os.path.join(p, f'(合并后){name.replace(n, ".xlsx")}')
代码语言:javascript
复制
import os
os.path.splitext('/Users/zhongxin/PycharmProjects/datawork/ZB-ECRC业务线路查询 3.10浙皖.xls')
Out[3]: ('/Users/zhongxin/PycharmProjects/datawork/ZB-ECRC业务线路查询 3.10浙皖', '.xls')
os.path.split('/Users/zhongxin/PycharmProjects/datawork/ZB-ECRC业务线路查询 3.10浙皖.xls')
Out[4]: ('/Users/zhongxin/PycharmProjects/datawork', 'ZB-ECRC业务线路查询 3.10浙皖.xls')

讲上述流程进行组合

代码语言:javascript
复制
def work():
    file_path = path.get()
    sheet_list = sheet.get().split('|')
    df_list = []
    p, name = os.path.split(file_path)
    _, n = os.path.splitext(file_path)
    new_path = os.path.join(p, f'(合并后){name.replace(n, ".xlsx")}')
    for i in sheet_list:
        df_list.append(get_df(file_path, i))
    result = concat_df(df_list)
    write_into_xls(result, new_path)

使用TK编写简单的GUI界面

代码语言:javascript
复制
top = Tk()
top.title('Excel合并工具')
top.geometry('600x400')
frame = Frame(top)
frame.pack()
lab = Label(frame, text='待合并Excel路径:   ')
lab.grid(row=0, column=0, sticky=W)
path = Entry(frame)
path.insert(0, '/Users/zhongxin/PycharmProjects/datawork/ZB-ECRC分销出货查询 4.10-4.11浙皖.xls')
path.grid(row=0, column=1, sticky=W)

lab = Label(frame, text='子sheet名称(使用|分割):   ')
lab.grid(row=1, column=0, sticky=W)
sheet = Entry(frame)
sheet.insert(0, '分销明细|分销明细_1')
sheet.grid(row=1, column=1, sticky=W)

btn1 = Button(frame, text="开始合并", command=lambda: thread_it(work), width=20)
btn1.grid(row=1, column=2, sticky=W)

text = Text(top, width=20, height=100)
text.pack(fill=X, side=BOTTOM)
top.mainloop()

GUI界面

github路径

https://github.com/zx490336534/ExcelConcat

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-04-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 测试游记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 需求分析
  • 使用到的库
  • 合并流程
    • 读取
      • 合并
        • 写入
          • 流程组合
          • 使用TK编写简单的GUI界面
          • github路径
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档