用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工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建
制造业采购供应链管理是企业运营的核心环节,供应链协同管理在供应链上下游企业之间建立紧密的合作关系,通过信息共享、资源整合、业务协同等方式,实现供应链的全面管理和优化,提高供应链的效率和透明度,降低供应链的成…...
五年级数学知识边界总结思考-下册
目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解:由来、作用与意义**一、知识点核心内容****二、知识点的由来:从生活实践到数学抽象****三、知识的作用:解决实际问题的工具****四、学习的意义:培养核心素养…...
Java入门学习详细版(一)
大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...
06 Deep learning神经网络编程基础 激活函数 --吴恩达
深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...
Java线上CPU飙高问题排查全指南
一、引言 在Java应用的线上运行环境中,CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时,通常会导致应用响应缓慢,甚至服务不可用,严重影响用户体验和业务运行。因此,掌握一套科学有效的CPU飙高问题排查方法&…...
JS手写代码篇----使用Promise封装AJAX请求
15、使用Promise封装AJAX请求 promise就有reject和resolve了,就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...

【Linux手册】探秘系统世界:从用户交互到硬件底层的全链路工作之旅
目录 前言 操作系统与驱动程序 是什么,为什么 怎么做 system call 用户操作接口 总结 前言 日常生活中,我们在使用电子设备时,我们所输入执行的每一条指令最终大多都会作用到硬件上,比如下载一款软件最终会下载到硬盘上&am…...

2025年- H71-Lc179--39.组合总和(回溯,组合)--Java版
1.题目描述 2.思路 当前的元素可以重复使用。 (1)确定回溯算法函数的参数和返回值(一般是void类型) (2)因为是用递归实现的,所以我们要确定终止条件 (3)单层搜索逻辑 二…...
如何通过git命令查看项目连接的仓库地址?
要通过 Git 命令查看项目连接的仓库地址,您可以使用以下几种方法: 1. 查看所有远程仓库地址 使用 git remote -v 命令,它会显示项目中配置的所有远程仓库及其对应的 URL: git remote -v输出示例: origin https://…...

李沐--动手学深度学习--GRU
1.GRU从零开始实现 #9.1.2GRU从零开始实现 import torch from torch import nn from d2l import torch as d2l#首先读取 8.5节中使用的时间机器数据集 batch_size,num_steps 32,35 train_iter,vocab d2l.load_data_time_machine(batch_size,num_steps) #初始化模型参数 def …...