用Python实现办公自动化(自动化处理Excel工作簿)
自动化处理Excel工作簿
(一)批量生产产品出货清单
以“出货统计表”为例, 需求:将出货记录按照出货日期分类整理成多张出货清单
“出货统计表数据案例”
“产品出货清单模板”
1.提取出货统计表的数据
“Python程序代码”
# 使用Python第三方模块openpyxl来操控Excel文件 from openpyxl import load_workbook# 1.0 读取工作簿“xxx.xlsx”中的数据 workbook = load_workbook("D:\\pppp\\第6章\\出货统计表.xlsx") worksheet = workbook["Sheet1"]# 2.0 对工作表中的出货记录按照出货日期进行分类整理,使用字典来组织数据 # 2.1 创建一个空字典data data = {} # 2.2 遍历工作表中数据的第2行到最后一行 for row in range(2, worksheet.max_row + 1):date = worksheet["B" + str(row)].value.date()customer = worksheet["C" + str(row)].valueproduct = worksheet["D" + str(row)].valuenumber = worksheet["E" + str(row)].valuemodel = worksheet["G" + str(row)].valueinfo_list = [customer, product, number, model]# 2.3将出货日期作为键,在遍历到具有相同出货日期的出货记录时,不覆盖原来的键(出货日期),而是将其添加到后面的空列表中,形成嵌套列表data.setdefault(date, [])data[date].append(info_list)# 3.0控制台输出字典的键值对,查看运行效果 for key, value in data.items():print(key, value)“运行效果展示”
2.使用for语句创建产品出货清单
“Python程序代码”
# 4.0 打开工作簿"出货清单模板.xlsx",并读取其中的工作表"出货清单模板" workbook_day = load_workbook("D:\\pppp\\第6章\\出货清单模板.xlsx") worksheet_day = workbook_day["出货清单模板"]# 5.0 按照出货日期遍历字典数据,复制工作表“出货清单模板”并进行重命名,再将出货日期写入出货清单 for date in data.keys():worksheet_new = worksheet_day.copy_worksheet(worksheet_day)worksheet_new.title = str(date)[-5:]worksheet_new.cell(row=2, column=5).value = date# 6.0 从第4行开始逐行填写出货记录i = 4for product in data[date]:worksheet_new.cell(row=i, column=2).value = product[0]worksheet_new.cell(row=i, column=3).value = product[1]worksheet_new.cell(row=i, column=4).value = product[2]worksheet_new.cell(row=i, column=5).value = product[3]i += 1 # 7.0 所有数据填写完毕,另存工作簿 worksheet_day.save("D:\\pppp\\第6章\\产品出货清单.xlsx")“查看工作簿”
3.完整代码
# 使用Python第三方模块openpyxl来操控Excel文件 from openpyxl import load_workbook# 1.0 读取工作簿“xxx.xlsx”中的数据 workbook = load_workbook("D:\\pppp\\第6章\\出货统计表.xlsx") worksheet = workbook["Sheet1"]# 2.0 对工作表中的出货记录按照出货日期进行分类整理,使用字典来组织数据 # 2.1 创建一个空字典data data = {} # 2.2 遍历工作表中数据的第2行到最后一行 for row in range(2, worksheet.max_row + 1):date = worksheet["B" + str(row)].value.date()customer = worksheet["C" + str(row)].valueproduct = worksheet["D" + str(row)].valuenumber = worksheet["E" + str(row)].valuemodel = worksheet["G" + str(row)].valueinfo_list = [customer, product, number, model]# 2.3将出货日期作为键,在遍历到具有相同出货日期的出货记录时,不覆盖原来的键(出货日期),而是将其添加到后面的空列表中,形成嵌套列表data.setdefault(date, [])data[date].append(info_list)# 3.0控制台输出字典的键值对,查看运行效果 for key, value in data.items():print(key, value)# 4.0 打开工作簿"出货清单模板.xlsx",并读取其中的工作表"出货清单模板" workbook_day = load_workbook("D:\\pppp\\第6章\\出货清单模板.xlsx") worksheet_day = workbook_day["出货清单模板"]# 5.0 按照出货日期遍历字典数据,复制工作表“出货清单模板”并进行重命名,再将出货日期写入出货清单 for date in data.keys():worksheet_new = workbook_day.copy_worksheet(worksheet_day)worksheet_new.title = str(date)[-5:]worksheet_new.cell(row=2, column=5).value = date# 6.0 从第4行开始逐行填写出货记录i = 4for product in data[date]:worksheet_new.cell(row=i, column=2).value = product[0]worksheet_new.cell(row=i, column=3).value = product[1]worksheet_new.cell(row=i, column=4).value = product[2]worksheet_new.cell(row=i, column=5).value = product[3]i += 1 # 7.0 所有数据填写完毕,另存工作簿 workbook_day.save("D:\\pppp\\第6章\\产品出货清单.xlsx")
(二)批量替换工作簿的单元格数据
对多个工作簿进行批量单元格数据替换操作。以“月销售统计”为例,将单元格中的数据“背包”替换为“双肩包”
可操控Excel的Python模块很多,例如:
功能 XlsxWriter xlrd
xlwt xlutils openpyxl xlwings 读 × √ × √ √ √ 写 √ × √ √ √ √ 修改 × × × √ √ √ 支持xls格式 × √ √ √ × √ 支持xlsx格式 √ √ √ × √ √ 支持批量操作 × × × × × √
“Python程序代码”
""" 将工作簿中的单元格数据替换为其他内容 """ # 导入pathlib模块中的Path()函数,用于完成路径相关操作 from pathlib import Path# 使用Python第三方模块xlwings来操控Excel文件 import xlwings as xw# 1.0 列出文件夹中的所有工作簿,启动Excel程序窗口,并不新建工作簿 src_folder = Path("D:\\pppp\\第6章\\月销售统计\\") file_list = list(src_folder.glob("*.xlsx")) # visible用于设置Excel程序窗口的可见性;add_book用于设置启动Excel程序窗口后是否新建工作簿 app = xw.App(visible=False, add_book=False)# 2.0 依次打开列表中的文件。Excel文件打开一个工作簿同时生成一个文件名以“~$”开头的临时文件 for i in file_list:# 跳过这类临时文件if i.name.startswith("~$"):continue# 打开工作不文件workbook = app.books.open(i)# 3.0 批量替换数据# 逐个遍历工作表for j in workbook.sheets:# 以单元格"A2"为起点,从工作表中读取所有数据,存储到变量data中data = j["A2"].expand("table").value# enumerate()是Python的内置函数,用于将一个可遍历的数据对象(如列表、元组、字符串等)组合为一个索引序列,可同时得到数据对象的索引及对应的值# index代表行号(从0开始),而val代表data中的小列表(即一行数据)for index, val in enumerate(data):# 列表中的元素索引是从0开始编号的,要替换的数据位于第3列,即设置2if val[2] == "背包":val[2] = "双肩包"data[index] = val# 将大列表写入工作表,用完成替换的数据覆盖原数据j["A2"].expand("table").value = data# 4.0 使用save()函数保存工作簿workbook.save()# 5.0 使用close()关闭工作簿workbook.close() # 6.0 使用quit()函数退出Excel程序 app.quit()“查看运行结果”
(三)将多个工作表合并为一个工作表
将多个工作簿中的同名工作表快速合并为一个工作表,并保存为一个新的工作簿
1.使用xlwings模块读取多个工作表中的数据
""" 将多个工作簿中的同名工作表快速合并为一个工作表,并保存为一个新的工作簿 """ # 导入pathlib模块中的Path()函数,用于完成路径相关操作 from pathlib import Path# 使用Python第三方模块xlwings来操控Excel文件 import xlwings as xw# 1.0 列出文件夹中的所有工作簿,启动Excel程序窗口,并不新建工作簿 src_folder = Path("D:\\pppp\\第6章\\月销售统计\\") file_list = list(src_folder.glob("*.xlsx")) # visible用于设置Excel程序窗口的可见性;add_book用于设置启动Excel程序窗口后是否新建工作簿 app = xw.App(visible=False, add_book=False)# 2.0 依次打开工作簿,读取指定工作表中的数据,并合并在一起 sheet_name = "产品销售统计" # 用于存放合并数据的列标题。None在Python中表示一个空对象 header = None all_data = [] for i in file_list:if i.name.startswith("~&"):continueworkbook = app.books.open(i)for j in workbook.sheets:if j.name == sheet_name:if header is None:header = j["A1:I1"].valuedata = j["A2"].expand("table").valueall_data = all_data + data# 3.0 使用close()关闭工作簿workbook.close()
2.新建工作簿存放合并后的数据
# 4.0 创建一个新的工作簿来存储这些数据 new_workbook = xw.Book() new_worksheet = new_workbook.sheets.add(sheet_name) new_worksheet["A1"].value = header new_worksheet["A2"].value = all_data # 使用工作表对象函数autofit()自动调整工作表的列宽和行高 new_worksheet.autofit() new_workbook.save(src_folder / "上半年产品销售统计表.xlsx") new_workbook.close()# 6.0 使用quit()函数退出Excel程序 app.quit()
3.完整代码
""" 将多个工作簿中的同名工作表快速合并为一个工作表,并保存为一个新的工作簿 """ # 导入pathlib模块中的Path()函数,用于完成路径相关操作 from pathlib import Path# 使用Python第三方模块xlwings来操控Excel文件 import xlwings as xw# 1.0 列出文件夹中的所有工作簿,启动Excel程序窗口,并不新建工作簿 src_folder = Path("D:\\pppp\\第6章\\月销售统计\\") file_list = list(src_folder.glob("*.xlsx")) # visible用于设置Excel程序窗口的可见性;add_book用于设置启动Excel程序窗口后是否新建工作簿 app = xw.App(visible=False, add_book=False)# 2.0 依次打开工作簿,读取指定工作表中的数据,并合并在一起 sheet_name = "产品销售统计" # 用于存放合并数据的列标题。None在Python中表示一个空对象 header = None all_data = [] for i in file_list:if i.name.startswith("~&"):continueworkbook = app.books.open(i)for j in workbook.sheets:if j.name == sheet_name:if header is None:header = j["A1:I1"].valuedata = j["A2"].expand("table").valueall_data = all_data + data# 3.0 使用close()关闭工作簿workbook.close()# 4.0 创建一个新的工作簿来存储这些数据 new_workbook = xw.Book() new_worksheet = new_workbook.sheets.add(sheet_name) new_worksheet["A1"].value = header new_worksheet["A2"].value = all_data # 使用工作表对象函数autofit()自动调整工作表的列宽和行高 new_worksheet.autofit() new_workbook.save(src_folder / "上半年产品销售统计表.xlsx") new_workbook.close()# 6.0 使用quit()函数退出Excel程序 app.quit()
(四)将一个工作表拆分为多个工作簿
Eg:以工作簿“产品统计表.xlsx”中的工作表"统计表"为例
“Python程序代码”
""" 将一个工作表拆分为多个工作簿。 需求:按照产品名称将工作表中的数据分类整理到不同的工作簿中。 """ # 导入pathlib模块中的Path()函数,用于完成路径相关操作 from pathlib import Path# 使用Python第三方模块xlwings来操控Excel文件 import xlwings as xw# 1.O 设置相关的文件和文件夹路径 src_file = Path("D:\\pppp\\第6章\\产品统计表.xlsx") des_folder = Path("D:\\pppp\\第6章\\拆分后的产品统计表\\") if not des_folder.exists():des_folder.mkdir(parents=True)# 2.0 打开工作簿,读取工作表中的数据 app = xw.App(visible=False, add_book=False) workbook = app.books.open(src_file) worksheet = workbook.sheets["统计表"] header = worksheet["A1:H1"].value data1 = worksheet.range("A2").expand("table").value# 3.0 按照产品名称对读取的数据进行分类 # 创建一个空字典data2 data2 = dict() # 设置循环次数,即读取数据的行数 for i in range(len(data1)):# 产品名称位于整个数据的第2列product_name = data1[i][1]if product_name not in data2:data2[product_name] = []data2[product_name].append(data1[i])# 4.0新建工作簿,保存分类后的数据 for k, v in data2.items():new_workbook = app.books.add()new_worksheet = new_workbook.sheets.add(k)new_worksheet["A1"].value = headernew_worksheet["A2"].value = vnew_worksheet.autofit()new_workbook.save(des_folder / f"{k}.xlsx")new_workbook.close()# 5.0 使用quit()函数退出Excel程序 app.quit()“运行结果展示”
(五)批量拆分列数据
(六)批量分类汇总数据
相关文章:
用Python实现办公自动化(自动化处理Excel工作簿)
自动化处理Excel工作簿 (一)批量生产产品出货清单 以“出货统计表”为例, 需求:将出货记录按照出货日期分类整理成多张出货清单 “出货统计表数据案例” “产品出货清单模板” 1.提取出货统计表的数据 “Python程序代码” # 使用…...
BaseDao入门使用
目录 一、什么是BaseDao?BaseDao的优点:BaseDao用来做什么操作? 二、BaseDao封装增删改查 案例演示:1、java与数据库进行连接2、连接后可对其进行操作(增、删、改)返回影响行数3、查询 查询一个字段(返回一…...
计算机毕业设计Python+Spark知识图谱高考志愿推荐系统 高考数据分析 高考可视化 高考大数据 大数据毕业设计 机器学习 深度学习 人工智能
学院(全称): 专业(全称): 姓名 学号 年级 班级 设计(论文) 题目 基于Spark的高考志愿推荐系统设计与实现 指导教师姓名 职称 拟…...
基于java+springboot+vue实现的电商个性化推荐系统(文末源码+Lw+ppt)23-389
摘 要 伴随着我国社会的发展,人民生活质量日益提高。于是对电商个性化推荐进行规范而严格是十分有必要的,所以许许多多的信息管理系统应运而生。此时单靠人力应对这些事务就显得有些力不从心了。所以本论文将设计一套电商个性化推荐系统,帮…...
论文阅读,The Lattice Boltzmann Method: Principles and Practice(六)(1)
目录 一、流体模拟方法概述 二、传统的Navier-Stokes求解器 2.1 有限差分 2.2 有限体积法 2.3 有限元法 三、基于粒子的求解器 3.1 动力学理论 3.2 分子动力学 3.3 格子气体模型 3.4 耗散粒子动力学 3.5 多粒子碰撞动力学 3.6 直接模拟蒙特卡罗方法 3.7 平滑粒子流…...
新能源充电桩站场视频汇聚系统建设方案及技术特点分析
随着新能源汽车的普及,充电桩作为新能源汽车的基础设施,其安全性和可靠性越来越受到人们的关注。为了更好地保障充电桩的安全运行与站场管理,TSINGSEE青犀&触角云推出了一套新能源汽车充电桩视频汇聚管理与视频监控方案。 方案采用高清摄…...
三、音频隐写[Audacity、deepsound、dtmf2num、MMSSTV、虚拟声卡、MP3Stego]
工具 1.Audacity 下载:https://www.audacityteam.org/download/windows/ 使用: 删除:先用左键长按拖着选中内容,然后选择软件最上方菜单栏的编辑,然后选择“删除”,最后点击文件的导出音频就能成功导出…...
二、Web3 学习(区块链)
区块链基础知识 一、基础知识1. 区块链可以做什么?2. 区块链的三个特点 二、区块链的类型概括1. PoW2. PoS3. 私有链和联盟链 三、智能合约1. 什么是智能合约2. 如何使用智能合约 四、困境1. 三难选择的基本要素2. 这真的是一个三难选择吗? 五、比特币1. 什么是比特…...
Linux内网提权
一、SUID提权 前提条件: (1)SUID仅对二进制有效(2)执行者对于该程序需要有x的可执行权限(3)本权限仅在程序的执行过程中有效 1、设置SUID权限:(root权限) …...
聚观早报 | 抖音独立商城App上线;阿里云联发科合作
聚观早报每日整理最值得关注的行业重点事件,帮助大家及时了解最新行业动态,每日读报,就读聚观365资讯简报。 整理丨Cutie 3月29日消息 抖音独立商城App上线 阿里云联发科合作 苹果WWDC24官宣 恒大汽车2023年营收财报 亚马逊投资Anthro…...
第十四届蓝桥杯省赛C++ B组所有题目以及题解(C++)【编程题均通过100%测试数据】
第一题《日期统计》【枚举】 【问题描述】 小蓝现在有一个长度为100的数组,数组中的每个元素的值都在0到9的范围之内。数组中的元素从左至右如下所示: 5 6 8 6 9 1 6 1 2 4 9 1 9 8 2 3 6 4 7 7 5 9 5 0 3 8 7 5 8 1 5 8 6 1 8 3 0 3 7 9 2 7 0 5 8 8 …...
【御控物联】 IOT异构数据JSON转化(场景案例一)
文章目录 前言技术资料 前言 随着物联网、大数据、智能制造技术的不断发展,越来越多的企业正在进行工厂的智能化转型升级。转型升级第一步往往是设备的智能化改造,助力设备数据快速上云,实现设备数据共享和场景互联。然而,在生产…...
Kubernetes-running app on kube
Docker 安装Docker 首先,您需要在Linux机器上安装Docker。如果您不使用Linux,则需要启动一个Linux虚拟机(VM)并在该虚拟机中运行Docker。如果你使用的是Mac或Windows系统,并按照指令安装Docker, Docker将为你建立一个虚拟机,并在…...
简述如何系统地学习Python
随着人工智能、大数据和云计算等技术的快速发展,编程已经成为了当今社会中不可或缺的一项技能。Python作为一种高级编程语言,因其简洁明了的语法、强大的功能和广泛的应用领域,成为了许多初学者和专业人士的首选。那么,如何系统地…...
bsd猜想 Murmuration of Eliptic Curves(笔记)
BSD Alexey Pozdnyakov (University of Connecticut) YUTUBE视频, B站搬运地址新生代女数学家Nina Zubrilina得到椭圆曲线椋鸟群飞模式精确公式与证明 Arithmetic Geometry算术几何 希尔伯特第十问题 希尔伯特第十问题(Hilbert’s Tenth Problem&#…...
小米汽车正式发布:开启智能电动新篇章
随着科技的不断进步,汽车产业正经历着前所未有的变革。智能电动汽车作为这一变革的重要方向,正吸引着越来越多的目光。在这个充满机遇和挑战的时代,小米汽车凭借其卓越的技术实力和深厚的市场底蕴,终于迈出了坚实的一步。今天&…...
线性代数笔记25--复数矩阵、快速傅里叶变换
1. 复数矩阵 复向量 Z [ z 1 z 2 z 3 z 4 ⋯ ] Z\begin{bmatrix} z_1\\z_2\\z_3\\z_4\\ \cdots \end{bmatrix} Z z1z2z3z4⋯ 复向量的模长 ∣ z ∣ z ‾ ⊤ z [ z ‾ 1 z ‾ 2 z ‾ 3 ] [ z 1 z 2 z 3 ] \lvert z\rvert\overline z^{\top}z \begin{bmatrix…...
洛谷 P8783 [蓝桥杯 2022 省 B] 统计子矩阵
题目描述 给定一个 NM 的矩阵 A,请你统计有多少个子矩阵 (最小 1111, 最大 NM 满足子矩阵中所有数的和不超过给定的整数 K。 输入格式 第一行包含三个整数 N,M 和 K。 之后 N 行每行包含 M 个整数, 代表矩阵 A。 输出格式 一个整数代表答案。 输入输出样例 …...
Rust 实战练习 - 8. 内存,ASM,外挂 【重磅】
目标: C写一个Demo版本的游戏由浅入深,了解外挂原理Linux/Android下实现内存读取ptrace实现内存修改(依赖第三方库) 先准备一个C写的小游戏 #include <stdio.h> #include <string.h>struct Role {float pos_x; // …...
XUbuntu22.04之Typora快捷键Ctrl+5不生效问题(二百二十六)
简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…...
KubeSphere 容器平台高可用:环境搭建与可视化操作指南
Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...
OpenLayers 可视化之热力图
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 热力图(Heatmap)又叫热点图,是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...
多模态2025:技术路线“神仙打架”,视频生成冲上云霄
文|魏琳华 编|王一粟 一场大会,聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中,汇集了学界、创业公司和大厂等三方的热门选手,关于多模态的集中讨论达到了前所未有的热度。其中,…...
Leetcode 3576. Transform Array to All Equal Elements
Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到…...
MODBUS TCP转CANopen 技术赋能高效协同作业
在现代工业自动化领域,MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步,这两种通讯协议也正在被逐步融合,形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...
学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1
每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...
分布式增量爬虫实现方案
之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面,避免重复抓取,以节省资源和时间。 在分布式环境下,增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路:将增量判…...
Python 包管理器 uv 介绍
Python 包管理器 uv 全面介绍 uv 是由 Astral(热门工具 Ruff 的开发者)推出的下一代高性能 Python 包管理器和构建工具,用 Rust 编写。它旨在解决传统工具(如 pip、virtualenv、pip-tools)的性能瓶颈,同时…...
基于Java+MySQL实现(GUI)客户管理系统
客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息,对客户进行统一管理,可以把所有客户信息录入系统,进行维护和统计功能。可通过文件的方式保存相关录入数据,对…...
莫兰迪高级灰总结计划简约商务通用PPT模版
莫兰迪高级灰总结计划简约商务通用PPT模版,莫兰迪调色板清新简约工作汇报PPT模版,莫兰迪时尚风极简设计PPT模版,大学生毕业论文答辩PPT模版,莫兰迪配色总结计划简约商务通用PPT模版,莫兰迪商务汇报PPT模版,…...








