使用Python第三方库xlwings将单个excel工作表快速拆分为多个工作表(附打包好的exe文件)

使用Python第三方库xlwings将单个excel工作表快速拆分为多个工作表(附打包好的exe文件)

资源链接

CSDN:https://download.csdn.net/download/qq_55292642/21947229
百度网盘链接:https://pan.baidu.com/s/1ppHsTmHQPViKhnDEwYxwqA
提取码:wzxy
在这里插入图片描述

问题背景

使用Excel处理整理数据时,有时需要将一个工作表按某个字段拆分成多个工作表。总表呢处理数据方便,一起就处理了,但展示效果就没有分表好。分表展示效果好,但如果每个表数据量不一致处理起来就很麻烦(如果一致可以使用Excel的工作组,批量操作多个分表),哪有没有什么办法能将总表快速的拆分为分表呢?

上百度搜索多半是使用数据透视表,虽然也能达到效果,但使用数据透视表对后续处理数据不是很方便。

之前一直使用的是筛选+CV大法(复制粘贴),这样效率太慢,处理少量的分表需求可以,但分表多了之后,就很麻烦了。所以之前有一段时间直接使用的是总表,就不想用分表了。

后面发现python可以完美解决这个问题,本文参考了一些其他博主的文章,同时做了一些改进,因为有时Python环境不是很好搭建,或者在其他电脑上临时使用,所以我最后使用pyinstaller将python源代码打包成exe可执行文件,可在没有python的电脑上使用(就是文件大小有些大)。

具体案例

现有下面这种分表
在这里插入图片描述
想把它按班级拆成4个分表,如下图
在这里插入图片描述

python源代码及环境

本代码参考了下面这篇文章,但对原作者的代码进行了改进,具体python环境见文件environment.yml(但这个环境后面装了一些其他的库,不是所有都是必要的,仅作参考)

参考了博主“hhl931181316”的文章:Python按条件将一个工作表拆分为多个工作表

# Excel拆分.py
'''
使用Python第三方库xlwings按条件将单个excel工作表拆分为多个工作表
具体运行环境见文件environment.yml(但这个环境后面装了一些其他的库,不是所有都是必要的,仅作参考)
'''

import os
import xlwings as xw
import pandas as pd   # 引用相关的库

folder = os.getcwd()   # 获取当前目录
files = os.listdir(folder)   # 获取当前目录所有文件夹

files_xlsx = []
for file in files:
    fname,ext = os.path.splitext(file)
    if ext in [".xlsx"] and fname[: 2] != "~$":
        files_xlsx.append(file)   # 筛选出xlsx文件并过滤xlsx隐藏文件

print("已找到如下Excel文件")
for i in files_xlsx:
    print(i,end="\n")
print("按任意键继续:")
input()

for xlsx in files_xlsx:
    print(f"即将拆分文件:\n{xlsx}\n")
    field_name = input("按什么拆分?")

    app = xw.App(visible=True, add_book=False)
    workbook = app.books.open(xlsx)
    worksheet = workbook.sheets[0]

    sheet_names = [j.name for j in workbook.sheets]
    value = worksheet.range('A1').options(pd.DataFrame,header = 1,
                                        index = False, expand = 'table').value  # 读取要拆分的工作表中的所有数据
    data = value.groupby(field_name)
    for idx, group in data:
        if idx not in sheet_names:
            new_worksheet = workbook.sheets.add(idx)
            new_worksheet.range('A1').options(index = False).value = group
        workbook.sheets[idx].range('A1').options(index = False).value = group
    workbook.save()
    workbook.close()
    app.quit()
    
    print(f"\n{xlsx}||拆分完成.")

print("全部拆分完成")
input("按任意键退出")

environment.yml

name: excel
channels:
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
  - defaults
dependencies:
  - argcomplete=1.12.3=pyhd3eb1b0_0
  - backcall=0.2.0=pyhd3eb1b0_0
  - ca-certificates=2021.7.5=haa95532_1
  - certifi=2021.5.30=py37haa95532_0
  - colorama=0.4.4=pyhd3eb1b0_0
  - debugpy=1.4.1=py37hd77b12b_0
  - decorator=5.0.9=pyhd3eb1b0_0
  - importlib_metadata=3.10.0=hd3eb1b0_0
  - ipykernel=6.2.0=py37haa95532_1
  - ipython=7.26.0=py37hd4e2768_0
  - ipython_genutils=0.2.0=pyhd3eb1b0_1
  - jedi=0.18.0=py37haa95532_1
  - jupyter_client=6.1.12=pyhd3eb1b0_0
  - jupyter_core=4.7.1=py37haa95532_0
  - matplotlib-inline=0.1.2=pyhd3eb1b0_2
  - openssl=1.1.1k=h2bbff1b_0
  - parso=0.8.2=pyhd3eb1b0_0
  - pickleshare=0.7.5=pyhd3eb1b0_1003
  - pip=21.2.2=py37haa95532_0
  - prompt-toolkit=3.0.17=pyh06a4308_0
  - pygments=2.10.0=pyhd3eb1b0_0
  - python=3.7.4=h5263a28_0
  - python-dateutil=2.8.2=pyhd3eb1b0_0
  - pyzmq=22.2.1=py37hd77b12b_1
  - setuptools=52.0.0=py37haa95532_0
  - six=1.16.0=pyhd3eb1b0_0
  - sqlite=3.36.0=h2bbff1b_0
  - tornado=6.1=py37h2bbff1b_0
  - traitlets=5.0.5=pyhd3eb1b0_0
  - typing_extensions=3.10.0.0=pyh06a4308_0
  - vc=14.2=h21ff451_1
  - vs2015_runtime=14.27.29016=h5e58377_2
  - wcwidth=0.2.5=py_0
  - wheel=0.37.0=pyhd3eb1b0_0
  - wincertstore=0.2=py37_0
  - zipp=3.5.0=pyhd3eb1b0_0
  - pip:
    - altgraph==0.17
    - et-xmlfile==1.1.0
    - future==0.18.2
    - importlib-metadata==4.6.4
    - numpy==1.21.2
    - openpyxl==3.0.7
    - pandas==1.3.2
    - pefile==2021.5.24
    - pyinstall==0.1.4
    - pyinstaller==4.5.1
    - pyinstaller-hooks-contrib==2021.2
    - pytz==2021.1
    - pywin32==301
    - pywin32-ctypes==0.2.0
    - xlsxwriter==3.0.1
    - xlwings==0.24.7
prefix: D:\InPrg\ProPrg\Prging\Anaconda3\envs\excel

使用方法

以使用exe可执行文件为例:
1.先新建一个文件夹,将要拆分的Excel表复制到这个文件夹:
在这里插入图片描述

然后将python源代码或者exe文件也复制到这个文件夹:
在这里插入图片描述
3.运行程序
在这里插入图片描述
4.根据程序提示完成操作
在这里插入图片描述
在这里插入图片描述

6.完成效果
在这里插入图片描述

待改进的地方

程序能完成上述操作,但有些细节还不完善,后续会对其进行完善。
主要有以下不足:

  • 添加的工作表在前面,不符合习惯
  • 添加的工作表没有设置格式,还需手动调整

后续

  • 增加拆分为多个工作簿的功能
  • 增加合并功能

资源链接

CSDN:https://download.csdn.net/download/qq_55292642/21947229
百度网盘链接:https://pan.baidu.com/s/1ppHsTmHQPViKhnDEwYxwqA
提取码:wzxy
在这里插入图片描述

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 24
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 24
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值