【办公自动化】使用Python一键往Word文档的表格中填写数据(文末送书)

news2024/11/19 5:43:07

🤵‍♂️ 个人主页:@艾派森的个人主页

✍🏻作者简介:Python学习者
🐋 希望大家多多支持,我们一起进步!😄
如果文章对你有帮助的话,
欢迎评论 💬点赞👍🏻 收藏 📂加关注+


目录

一、Python处理Word

二、一键往Word文档的表格中填写数据

三、往期推荐


一、Python处理Word

  • Python处理Word的好处

使用Python处理Word文档具有许多优势,以下是一些主要的好处:

  1. 自动化和批量处理: Python可以帮助你自动化处理大量的Word文档,例如批量替换文本、生成报告、提取数据等。这样可以节省大量的时间和劳动力。

  2. 数据提取和转换: 如果你需要从大量的Word文档中提取特定数据,Python可以轻松实现这一点。你可以编写脚本来搜索并提取你需要的信息,然后将其转换为其他格式,如CSV、Excel或数据库。

  3. 定制化和自由度: 使用Python处理Word文档意味着你可以根据自己的需求定制处理过程。你可以创建定制的模板、样式和布局,以及根据项目需求进行灵活的调整。

  4. 与其他工具和技术的集成: Python可以与许多其他库和技术进行集成,例如数据库、Web服务、数据分析工具等。这使得你可以将Word文档的处理与其他工作流程结合起来,实现更复杂的任务。

  5. 文档生成和报告: 如果你需要定期生成报告或文档,Python可以通过自动生成文本、图表和表格等来实现。这对于数据分析、项目管理和业务报告等非常有用。

  6. 版本控制和代码重用: 使用Python代码处理Word文档可以实现代码重用和版本控制。你可以将处理文档的代码存储在版本控制系统中,以便团队成员协作、维护和共享代码。

  7. 跨平台性: 大多数Python库可以在多个操作系统上运行,因此你可以在Windows、Linux和macOS等不同平台上处理Word文档。

  • Python处理Word的第三方库

在Python中,有几个第三方库可以用于处理Word文档。以下是一些常用的第三方库:

  1. python-docx: 这是一个用于创建和修改Microsoft Word文档(.docx格式)的流行库。它允许你读取、编辑和创建Word文档,包括段落、表格、图像等。

  2. pywin32(仅限Windows): 这个库允许你在Windows上与Microsoft Office应用程序进行交互,包括Word。它可以用于自动化操作,例如创建、打开、编辑和保存文档。

  3. docx2txt: 这个库可以用来将.docx文件转换为纯文本(.txt格式)。它适用于从Word文档中提取文本内容。

  4. python-docx-template: 这个库扩展了python-docx库,使你能够在模板中插入变量和循环,并以更动态的方式生成Word文档。

  5. py-docx: 这是另一个用于处理.docx文件的库。它提供了类似python-docx的功能,但使用不同的接口。

二、一键往Word文档的表格中填写数据

技术工具:

Python版本:3.9

代码编辑器:jupyter notebook

        在工作中,我们经常遇到将Excel表中的部分信息填写到Word文档的对应表格中,以生成报告,方便打印。今天我们就来试试如何往固定的Word模板中填写数据。此例要求将Excel档的“收货数据”填写到Word档的“收货记录”中去,并加总收货数量。模板是下面这样的。

要求结果是这样的:

 首先,需要从Excel表格中提取数据。

#从Excel表中提取数据
from openpyxl import load_workbook
wb = load_workbook("收货数据.xlsx")
ws = wb.active
data=[]
for row in range(2,ws.max_row+1):
    seq = ws["A"+str(row)].value
    supplier = ws["B"+str(row)].value
    material_pn = ws["C"+str(row)].value
    material_model = ws["D"+str(row)].value
    desp = ws["E"+str(row)].value
    qty = ws["F"+str(row)].value
    date = ws["G"+str(row)].value.date()
    info = [seq, supplier, material_pn, material_model, desp, qty, date]
    data.append(info)
# 检查一下数据
data[0]

由于需要将数量列的数据加总,所以先定义一个加总函数,以便后面调用。

#定义数量加总函数
def Sum_list(list):
    s = 0
    for i in list: #累加列表中的所有数
        s+=i
    return s
# 加总数量列的所有数字
qty_list=[]
for i in data:
    qty_list.append(i[5]) #数量在内层列表的第6个位置,索引是5
sum_qty= Sum_list(qty_list) #调用加总函数加总
sum_qty

定义单元格合并函数 

#定义合并单元格的函数    
def Merge_cells(table,target_list,start_row,col):
    '''
    table: 是需要操作的表格
    target_list: 是目标列表,即含有重复数据的列表
    start_row: 是开始行,即表格中开始比对数据的行(需要将标题除开)
    col: 是需要处理数据的列
    '''
    start = 0 #开始行计数
    end = 0 #结束行计数
    reference = target_list[0] #设定基准,以列表中的第一个字符串开始
    for i in range(len(target_list)): #遍历列表
        if target_list[i] != reference: #开始比对,如果内容不同执行如下
            reference = target_list[i] #基准变成列表中下一个字符串
            end = i - 1 
            table.cell(start+start_row,col).merge(table.cell(end+start_row,col))
            start = end + 1
        if i == len(target_list) - 1: #遍历到最后一行,按如下操作
            end = i
            table.cell(start+start_row,col).merge(table.cell(end+start_row,col))

然后往word的表格中写入数据,并合并单元格。

#数据提取即处理完毕后,就可以往Word的表格中写入数据了
from docx import Document
doc = Document("收货记录模板.docx")
#读取word文档中的第一个表格的第二和第三列除标题和尾部总数行的数据
table = doc.tables[0] #已确定是第一个表格,其索引是0
supplier = [] #存储供应商名称
pn = [] #存储物料编码
for i in data:
    supplier.append(i[1])
    pn.append(i[2])
#按需增加行,以便填写数据
for i in range(len(supplier)): #模板中已经有一行了,所以总共只需增加len(supplier)行
    table.add_row() 
#增加好行后先做合并单元格操作
Merge_cells(table,supplier,1,1) #开始合并行为2,索引为1;供应商名称是在2列,索引为1
Merge_cells(table,pn,1,2) #开始合并行为2,索引为1;物料编码是在3列,索引为2

#写入数据到表格
for row in range(1,len(supplier)+1):
    for col in range(7):        
        table.cell(row,col).text = str(data[row-1][col])

max_row = len(table.rows) #获取最大一行
qty_row = max_row-1 #确定需要写入加总数据的一行
table.cell(qty_row,5).merge(table.cell(qty_row,5)) #合并右下角用于填写数量的两个单元格
table.cell(qty_row,4).text = '总数:'
table.cell(qty_row,5).text = str(sum_qty)

doc.save("收货记录.docx")

        由于合并供应商名称和物料编码两列中的相同内容的单元格,所有需要把这两列的信息从总数据`data`中单独提取出来。新建了`supplier`和`pn`两个空列表,然后遍历`data`,将数据取出并存入空列表。随后,我们根据实际需要,新增一些空白行,以便后面写入数据。新增行的数量以`supplier`列表中元素的个数为依据。这个表格已经存在一个空白行,算上外行要填“总数”,只需增加`supplier`列表中元素的个数对应那么多行就够了。当然这里也可以以列表`pn`中元素个数为依据,两者是相等的。增加好行后,先调用函数`Merge_cells`做合并单元格操作(如果先写入数据,再合并,会导致单元格内容重复)。合并完后,就可以写入数据到表格了,此处遍历需要写入数据的行和列,然后从`data`中提取数据。数据行写完后,还需要写入最后一行的“总数”字样和总的物料数量。最后保存数据,得到如下结果:

三、往期推荐

Python提取pdf中的表格数据(附实战案例)

使用Python自动发送邮件

Python操作ppt和pdf基础

Python操作word基础

Python操作excel基础

使用Python一键提取PDF中的表格到Excel

四、文末推荐与福利

《Python自动化办公应用大全(ChatGPT版)》免费包邮送出3本!

内容简介:

        本书全面系统地介绍了Python语言在常见办公场景中的自动化解决方案。全书分为5篇21章,内容包括Python语言基础知识,Python读写数据常见方法,用Python自动操作Excel,用Python自动操作Word 与 PPT,用Python自动操作文件和文件夹、邮件、PDF 文件、图片、视频,用Python进行数据可视化分析及进行网页交互,借助ChatGPT轻松进阶Python办公自动化。 
        本书适合各层次的信息工作者,既可作为初学Python的入门指南,又可作为中、高级自动化办公用户的参考手册。书中大量的实例还适合读者直接在工作中借鉴。

编辑推荐:

        借助ChatGPT与Python轻松实现办公自动化:Excel Home多位微软全球MVP专家打造,用大量实例介绍使用Python操作Excel、Word、PPT和日常办公中涉及的各种对象。让没有编程经验的普通办公人员也能驾驭Python,实现多个场景的办公自动化,提升工作效率!

  • 抽奖方式:评论区随机抽取3位小伙伴免费送出!
  • 参与方式:关注博主、点赞、收藏、评论区评论“人生苦短,拒绝内卷!”(切记要点赞+收藏,否则抽奖无效,每个人最多评论三次!
  • 活动截止时间:2023-09-28 20:00:00
  • 当当网购买链接:http://product.dangdang.com/29566495.html

  • 京东网购买链接:https://item.jd.com/13953308.html

 名单公布时间:2023-09-28 21:00:00   

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1039544.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

DirectX 12 学习笔记 -结构

上篇文章我们创建了一个窗口&#xff0c;看样子还不难&#xff0c;我们继续玩DX12 引用一些文件 头文件 #include <d3d12.h> #include <dxgi1_4.h> #include <wrl.h>还有一些库 #pragma comment(lib, "d3d12.lib") #pragma comment(lib, "…

【择校宝典】80所院校择校汇总更新!

截止目前为止&#xff0c;我已发布近。80所院校的择校分析&#xff0c;102所名校真题。139所重点勾画 哈喽大家好&#xff0c;之前答应大家&#xff0c;在报考之前汇总择校分析。告诉大家我发现的规律&#xff0c;辅助大家报考&#xff0c;绝不食言&#xff01; 千呼万唤始出…

【好玩的开源项目】Windows 12网页版的部署与使用体验

【好玩的开源项目】Windows 12网页版的部署与使用体验 一、Windows 12网页版介绍1.1 Windows 12网页版简介1.2 项目地址 二、本次实践介绍2.1 本地环境规划2.2 本次实践介绍 三、安装httpd软件3.1 检查yum仓库3.2 安装httpd软件3.3 启动httpd服务3.4 查看httpd服务3.5 防火墙和…

历史高频行情数据存储最佳实践:DolphinDB Array Vector 使用指南

越来越多的机构使用 L1/L2 的快照行情数据进行量化金融的研究。作为一个高性能时序数据库&#xff0c;DolphinDB 非常适合存储和处理海量的历史高频行情数据。针对快照数据包含多档位信息的特点&#xff0c;DolphinDB 研发了一种方便、灵活且高效的数据结构——Array Vector&am…

【李沐深度学习笔记】基础优化方法

课程地址和说明 基础优化方法p2 本系列文章是我学习李沐老师深度学习系列课程的学习笔记&#xff0c;可能会对李沐老师上课没讲到的进行补充。 基础优化方法 在讲具体的线性回归实现之前&#xff0c;要先讲一下基础的优化模型的方法 梯度下降 当模型没有显示解&#xff08…

比较身高-第15届蓝桥杯第一次STEMA测评Scratch真题精选

[导读]&#xff1a;超平老师的《Scratch蓝桥杯真题解析100讲》已经全部完成&#xff0c;后续会不定期解读蓝桥杯真题&#xff0c;这是Scratch蓝桥杯真题解析第153讲。 第15届蓝桥杯第1次STEMA测评已于2023年8月20日落下帷幕&#xff0c;编程题一共有6题&#xff0c;分别如下&a…

【HUAWEI】trunk和access两种链路模式实例

目录 &#x1f96e;0.写在前面 &#x1f363;基本操作命令 &#x1f363;常见视图命令 &#x1f96e;1、trunkaccess &#x1f363;1.1、拓扑图 &#x1f363;1.2、操作思路 &#x1f363;1.3、配置操作 &#x1f361;1.3.1、LSW1配置 &#x1f361;1.3.2、LSW2配置 &#x1f3…

Android Key/Trust Store研究+ssl证书密钥

前言&#xff1a;软件搞环境涉及到了中间件thal trustzone certificate key&#xff0c;翻译过来是thal信任区域证书密钥 &#xff0c;不明白这是什么&#xff0c;学习一下 ssl证书密钥 SSL密钥是SSL加密通信中的重要组成部分。SSL证书通过加密算法生成&#xff0c;用于保护网…

sgx支持数据库环境配置,编译,debug

环境都编译为debug模式&#xff0c;为了开发&#xff0c;并利用sgx的debugger sgx-gdb进行debug 查看cpu是否支持sgx delldell-Precision-3630-Tower  /nvme  lscpu Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Byte…

AUTOSAR中的Crypto Stack(一)--概述

前面我们聊到了比较多的关于信息安全的概念,以及主流MCU的信息安全方案。但从软件工程师的角度来看,最终这些信息安全的概念都是会从软件来实现;如何设计出一种合理、安全的信息安全软件框架,我们从AUTOSAR的加密栈来分析。 该协议栈主要从以下几个方面来介绍: AUTOSAR中…

蓝桥杯打卡Day15天

文章目录 买不到的数目错误票据 一、买不到的数目OJ链接 本题思路:引理&#xff1a;给定a&#xff0c;b&#xff0c;若dgcd(a,b)>1 ,则一定不能凑出最大数。结论&#xff1a;如果 a,b均是正整数且互质&#xff0c;那么由 axby,x≥0,y≥0 不能凑出的最大数是 ab−a−b。 证…

Bigemap如何查看历史影像

工具 Bigemap gis office地图软件 BIGEMAP GIS Office-全能版 Bigemap APP_卫星地图APP_高清卫星地图APP 很多人都在寻找历史影像图&#xff0c;这块的需求是非常大&#xff0c;历史影像一般可以用于历史地貌的变迁分析&#xff0c;还原以前的生态场景&#xff0c;对范围面积…

深入探讨Vue.js:从基础到高级(最佳实践)

文章目录 Vue.js 基础1. Vue.js 是什么&#xff1f;2. Vue 实例3. 双向数据绑定 Vue 组件1. 什么是 Vue 组件&#xff1f;2. 组件之间的通信 Vue 模板语法1. 插值和指令2. 条件和循环3. 事件绑定和表单输入绑定 Vue 路由1. Vue Router安装和配置&#xff1a;导航&#xff1a; 2…

企业做软文推广的三大错误有哪些?媒介盒子为您解答

软文营销已经成为企业宣传的主要方式&#xff0c;但有很多企业来找媒介盒子咨询&#xff0c;明明花了大量成本来做软文推广&#xff0c;为什么就是没效果呢&#xff1f;小编看了下&#xff0c;发现大部分企业做软文推广效果不明显&#xff0c;基本上犯了三大错误&#xff0c;接…

风向对风力机发电的影响

目录 1. 摘要2. 简介 1. 摘要 随着风力发电机的增大&#xff0c;风向随高度的变化&#xff08;风偏转&#xff09;在入流风场中起到了至关重要的作用。我们使用明尼苏达大学Eolos风能研究站5年的实地数据集来探讨风偏转的特性及其对涡轮性能的影响。风偏转表现出明显的日变化&…

一款值得入手的双节电池1A电流线性充电芯片-YB4028

概述: YB4028 是一款双节串联锂电池充电管理芯片&#xff0c;集成涓流、恒流、恒压三段式线性充电管理&#xff0c;符合锂电池安全充电规范。充电输入耐压高达20V&#xff0c;充电电流高至 10A&#xff0c;可通过片外电阻配置。 YB4028 集成防倒灌电路&#xff0c;输入电压拔…

大数据flink篇之一-基础知识

一、起源 2010至2014年间&#xff0c;由柏林工业大学、柏林洪堡大学和哈索普拉特纳研究所联合发起名Stratosphere的研究项目。2014年4月&#xff0c;项目贡献给Apache基金会&#xff0c;成为孵化项目。更名为Flink2014年12月&#xff0c;成为基金会顶级项目2015年9月&#xff…

MAC word 如何并列排列两张图片

系统&#xff1a;MAC os 参考博客 https://baijiahao.baidu.com/s?id1700824516945958911&wfrspider&forpc 步骤1 新建一个word文档和表格 修改表格属性 去掉自动重调尺寸以适应内容 插入图片 在表格的位置插入对应的图片如下 去除边框 最终结果如下

数据大爆炸:大数据分析如何改变我们的世界

文章目录 大数据分析的基本概念数据的三个V大数据分析的技术 大数据分析在商业中的应用1. 个性化营销2. 风险管理3. 供应链优化4. 客户服务 大数据分析在医疗保健中的应用1. 疾病预测2. 患者治疗3. 医疗设备监控 大数据分析在科学研究中的应用1. 天文学2. 生物学3. 气象学 大数…

mock.js与组件通信之总线的讲解

目录 一Mock.js 1.1简介 1.2 安装配置Mock.js 1.3 mock.js的使用 二. 组件通信之总线 2.1 总线的简介 2.2 总线的使用-以导航栏的收进为例 好啦今天的分享就到这啦&#xff01;&#xff01; 一Mock.js 1.1简介 Mock.js 是一个用于生成随机数据的 JavaScript 库。它可以模拟…