超简单:用Python让Excel飞起来(零基础学python,用python实现办公自动化,让excel化繁为简,减少重复工作)_AZW3_MOBI_EPUB_王秀文
内容节选
案例08 按条件将一个工作表拆分为多个工作簿 ·代码文件:按条件将一个工作表拆分为多个工作簿.py ·数据文件:产品统计表.xlsx 应用场景 小新 在统计产品销售数据时,我将所有产品的销售数据都放在工作簿“产品统计表.xlsx”中的工作表“统计表”中,如下图所示,但是现在老板又让我将不同产品的销售数据放置在不同的工作簿中。也就是说,产品“背包”的销售数据要提取出来并放置在工作簿“背包.xlsx”中,产品“行李箱”的销售数据要提取出来并放置在工作簿“行李箱.xlsx”中,依此类推。虽然可以用Excel的筛选功能完成,但是如果产品有上百种,操作起来既耗时又枯燥。有没有更好的办法呢? 老王 你想要实现的就是下图这样的效果嘛。这也简单,下面还是用来源工作簿和目标工作簿这样的叫法来讲解代码。 实现代码 1 import xlwings as xw # 导入xlwings模块 2 file_path = 'e:\\table\\产品统计表.xlsx' # 给出来源工作簿的文件路径 3 sheet_name = '统计表' # 给出要拆分的工作表的名称 4 app = xw.App(visible = True, add_book = False) # 启动Excel程序 5 workbook = app.books.open(file_path) # 打开来源工作簿 6 worksheet = workbook.sheets[sheet_name] # 选中要拆分的工作表 7 value = worksheet.range('A2').expand('table').value # 读取要拆分的 工作表中的所有数据 8 data = dict() # 创建一个空字典用于按产品名称分类存放数据 9 for i in range(len(value)): # 按行遍历工作表数据 10 product_name = value[i][1] # 获取当前行的产品名称,作为数据的分 类依据 11 if product_name not in data: # 判断字典中是否不存在当前行的产品 名称 12 data[product_name] = [] # 如果不存在,则创建一个与当前行的产 品名称对应的空列表,用于存放当前行的数据 13 data[product_name].append(value[i]) # 将当前行的数据追加到当前 行的产品名称对应的列表中 14 for key,value in data.items(): # 按产品名称遍历分类后的数据 15 new_workbook = xw.books.add() # 新建目标工作簿 16 new_worksheet = new_workbook.sheets.add(key) # 在目标工作簿中新 增工作表并命名为当前的产品名称 17 new_worksheet['A1'].value = worksheet['A1:H1'].value # 将要拆 分的工作表的列标题复制到新建的工作表中 18 new_worksheet['A2'].value = value # 将当前产品名称下的数据复制到 新建的工作表中 19 new_workbook.save('{}.xlsx'.format(key)) # 以当前产品名称作为文 件名保存目标工作簿 20 app.quit() # 退出Excel程序 代码解析 第2~7行代码用于指定要拆分哪个工作簿中的哪个工作表,并读取这个工作表中的所有数据。第7行代码中的“A2”是指读取数据的起始单元格,可根据实际需求更改。 第9~13行代码中的for语句利用第8行代码中创建的空字典来按照产品名称分类整理前面读取的数据。第10行代码中的value[i][1]用于按数据区域的行和列确定分类依据,两个中括号中的值分别用于指定行序号和列序号(均从0开始),例如,[0][0]代表第1行第1列,[0][1]代表第1行第2列,[1][1]代表第2行第2列,依此类推。本案例的分类依据是“产品名称”,该列位于整个数据区域的B列,也就是第2列,所以value后为[i][1]。读者可根据实际需求设置分类依据。 第14~19行代码中的for语句用于新建工作簿,并将前面分类整理好的数据分别复制到这些新建工作簿的工作表中。第17行代码中,A1:H1代表要拆分的工作表“统计表”的列标题单元格区域,A1则表示从新建工作簿中工作表的单元格A1开始粘贴列标题单元格区域。第18行代码中的A2是指从新建工作簿中工作表的单元格A2开始粘贴分类后的产品数据。这3个参数可以根据实际需求更改。 知识延伸 第19行代码在指定工作簿的文件名时使用了一种新的字符串拼接方法——format()函数法,该函数的......
- 前言
- 如何获取学习资源
- 第1章 Python快速上手
- 1.1 为什么要学习用Python控制Excel
- 1.2 Python编程环境的搭建
- 1.2.1 安装Python官方的编程环境IDLE
- 1.2.2 安装与配置Anaconda和PyCharm
- 1.3 Python的模块
- 1.3.1 初识模块
- 1.3.2 模块的安装
- 1.4 让Excel飞一下
- 第2章 Python的基础语法知识
- 2.1 变量
- 2.2 数据类型:数字与字符串
- 2.2.1 数字
- 2.2.2 字符串
- 2.2.3 数据类型的查询
- 2.2.4 数据类型的转换
- 2.3 数据类型:列表、字典、元组与集合
- 2.3.1 列表
- 2.3.2 字典
- 2.3.3 元组和集合
- 2.4 运算符
- 2.4.1 算术运算符和字符串运算符
- 2.4.2 比较运算符
- 2.4.3 赋值运算符
- 2.4.4 逻辑运算符
- 2.5 编码基本规范
- 2.5.1 缩进
- 2.5.2 注释
- 2.6 控制语句
- 2.6.1 if语句
- 2.6.2 for语句
- 2.6.3 while语句
- 2.6.4 控制语句的嵌套
- 2.7 函数
- 2.7.1 内置函数
- 2.7.2 自定义函数
- 第3章 Python模块
- 3.1 模块的导入
- 3.1.1 import语句导入法
- 3.1.2 from语句导入法
- 3.2 处理文件和文件夹的模块——os
- 3.2.1 获取当前运行的Python代码文件路径
- 3.2.2 列出指定路径下的文件夹包含的文件和子文件夹名称
- 3.2.3 分离文件主名和扩展名
- 3.2.4 重命名文件和文件夹
- 3.3 批量处理Excel文件的模块——xlwings
- 3.3.1 创建工作簿
- 3.3.2 保存工作簿
- 3.3.3 打开工作簿
- 3.3.4 操控工作表和单元格
- 3.4 数组计算的数学模块——NumPy
- 3.4.1 数组的基础知识
- 3.4.2 数组的创建
- 3.5 数据导入和整理模块——pandas
- 3.5.1 二维数据表格DataFrame的创建与索引的修改
- 3.5.2 文件的读取和写入
- 3.5.3 数据的选取和处理
- 3.5.4 数据表的拼接
- 3.6 数据可视化模块——Matplotlib
- 3.6.1 绘制折线图
- 3.6.2 绘制柱形图
- 3.7 模块的交互
- 3.7.1 xlwings模块与pandas模块的交互
- 3.7.2 xlwings模块与Matplotlib模块的交互
- 第4章 使用Python批量处理工作簿和工作表
- 案例01 批量新建并保存工作簿
- 举一反三 批量新建并关闭工作簿
- 案例02 批量打开一个文件夹下的所有工作簿
- 举一反三 列出文件夹下所有文件和子文件夹的名称
- 案例03 批量重命名一个工作簿中的所有工作表
- 举一反三 批量重命名一个工作簿中的部分工作表
- 案例04 批量重命名多个工作簿
- 举一反三 批量重命名多个工作簿中的同名工作表
- 案例05 在多个工作簿中批量新增工作表
- 举一反三 在多个工作簿中批量删除工作表
- 案例06 批量打印工作簿
- 举一反三 批量打印多个工作簿中的指定工作表
- 案例07 将一个工作簿的所有工作表批量复制到其他工作簿
- 举一反三 将某个工作表的数据批量复制到其他工作簿的指定工作表中
- 案例08 按条件将一个工作表拆分为多个工作簿
- 举一反三 按条件将一个工作表拆分为多个工作表
- 举一反三 将多个工作表拆分为多个工作簿
- 案例09 批量合并多个工作簿中的同名工作表
- 举一反三 将工作簿中名称有规律的工作表合并到一个工作表
- 第5章 使用Python批量处理
- 案例01 精确调整多个工作簿的行高和列宽
- 举一反三 精确调整一个工作簿中所有工作表的行高和列宽
- 案例02 批量更改多个工作簿的数据格式
- 举一反三 批量更改多个工作簿的外观格式
- 案例03 批量替换多个工作簿的行数据
- 举一反三 批量替换多个工作簿中的单元格数据
- 举一反三 批量修改多个工作簿中指定工作表的列数据
- 案例04 批量提取一个工作簿中所有工作表的特定数据
- 举一反三 批量提取一个工作簿中所有工作表的列数据
- 举一反三 在多个工作簿的指定工作表中批量追加行数据
- 案例05 对多个工作簿中指定工作表的数据进行分列
- 举一反三 批量合并多个工作簿中指定工作表的列数据
- 举一反三 将多个工作簿中指定工作表的列数据拆分为多行
- 案例06 批量提取一个工作簿中所有工作表的唯一值
- 举一反三 批量提取一个工作簿中所有工作表的唯一值并汇总
- 第6章 使用Python批量进行
- 案例01 批量升序排序一个工作簿中的所有工作表
- 举一反三 批量降序排序一个工作簿中的所有工作表
- 举一反三 批量排序多个工作簿中的数据
- 案例02 筛选一个工作簿中的所有工作表数据
- 举一反三 在一个工作簿中筛选单一类别数据
- 案例03 对多个工作簿中的工作表分别进行分类汇总
- 举一反三 批量分类汇总多个工作簿中的指定工作表
- 举一反三 将多个工作簿数据分类汇总到一个工作簿
- 案例04 对一个工作簿中的所有工作表分别求和
- 举一反三 对一个工作簿中的所有工作表分别求和并将求和结果写入固定单元格
- 案例05 批量统计工作簿的最大值和最小值
- 举一反三 批量统计一个工作簿中所有工作表的最大值和最小值
- 案例06 批量制作数据透视表
- 举一反三 为一个工作簿的所有工作表制作数据透视表
- 案例07 使用相关系数判断数据的相关性
- 举一反三 求单个变量和其他变量间的相关性
- 案例08 使用方差分析对比数据的差异
- 举一反三 绘制箱形图识别异常值
- 案例09 使用描述统计和直方图制定目标
- 举一反三 使用自定义区间绘制直方图
- 案例10 使用回归分析预测未来值
- 举一反三 使用回归方程计算预测值
- 第7章 使用Python制作简单的图表并设置图表元素
- 案例01 在Python中制作简单的图表
- 举一反三 在Python中制作柱形图
- 举一反三 在Python中制作条形图
- 举一反三 在Python中制作饼图
- 案例02 在Python中导入Excel数据制作简单的图表
- 举一反三 导入数据制作散点图
- 举一反三 导入数据制作面积图
- 案例03 在Python中制作组合图表
- 举一反三 制作双折线图
- 案例04 添加并设置图表标题和坐标轴标题
- 举一反三 添加图例
- 案例05 添加并设置数据标签
- 举一反三 设置y轴的取值范围
- 案例06 为组合图表添加并设置次坐标轴
- 举一反三 添加并设置网格线
- 第8章 使用Python制作常用图表
- 案例01 制作柱形图展示数据的对比关系
- 举一反三 批量制作条形图
- 案例02 制作折线图展示数据变化趋势
- 举一反三 制作折线图并为最高点添加数据标签
- 举一反三 制作平滑折线图
- 案例03 制作散点图判断两组数据的相关性
- 举一反三 为散点图添加线性趋势线
- 举一反三 制作气泡图
- 案例04 制作饼图展示部分和总体的比例关系
- 举一反三 制作圆环图
- 案例05 制作雷达图对比多项指标
- 举一反三 制作某一品牌性能评价指标雷达图
- 案例06 制作温度计图展示工作进度
- 举一反三 制作上半年销售业绩的温度计图
- 第9章 在Excel中调用Python代码
- 9.1 在工作表中调用Python自定义函数
- 9.1.1 在Excel中加载xlwings插件
- 9.1.2 导入并调用Python自定义函数
- 9.2 在VBA中调用Python自定义函数
- 9.2.1 通过命令创建文件并调用Python自定义函数
- 9.2.2 手动创建文件并调用Python自定义函数
- 9.2.3 VBA代码和Python代码的混合使用
- 9.3 将Python代码转换为可执行程序
- 9.3.1 PyInstaller模块的语法和参数含义
- 9.3.2 将Python代码打包成可执行程序
- 9.3.3 打包文件的实际应用