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

简介: 【办公自动化】使用Python一键往Word文档的表格中填写数据

一、Python处理Word


  • Python处理Word的好处


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


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


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


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


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


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


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


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


  • Python处理Word的第三方库


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


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


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


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


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


  1. 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

目录
相关文章
|
6天前
|
数据采集 数据安全/隐私保护 Python
从零开始:用Python爬取网站的汽车品牌和价格数据
在现代化办公室中,工程师小李和产品经理小张讨论如何获取懂车帝网站的汽车品牌和价格数据。小李提出使用Python编写爬虫,并通过亿牛云爬虫代理避免被封禁。代码实现包括设置代理、请求头、解析网页内容、多线程爬取等步骤,确保高效且稳定地抓取数据。小张表示理解并准备按照指导操作。
从零开始:用Python爬取网站的汽车品牌和价格数据
|
1天前
|
算法 Serverless 数据处理
从集思录可转债数据探秘:Python与C++实现的移动平均算法应用
本文探讨了如何利用移动平均算法分析集思录提供的可转债数据,帮助投资者把握价格趋势。通过Python和C++两种编程语言实现简单移动平均(SMA),展示了数据处理的具体方法。Python代码借助`pandas`库轻松计算5日SMA,而C++代码则通过高效的数据处理展示了SMA的计算过程。集思录平台提供了详尽且及时的可转债数据,助力投资者结合算法与社区讨论,做出更明智的投资决策。掌握这些工具和技术,有助于在复杂多变的金融市场中挖掘更多价值。
22 12
|
1月前
|
机器学习/深度学习 运维 数据可视化
Python时间序列分析:使用TSFresh进行自动化特征提取
TSFresh 是一个专门用于时间序列数据特征自动提取的框架,支持分类、回归和异常检测等机器学习任务。它通过自动化特征工程流程,处理数百个统计特征(如均值、方差、自相关性等),并通过假设检验筛选显著特征,提升分析效率。TSFresh 支持单变量和多变量时间序列数据,能够与 scikit-learn 等库无缝集成,适用于大规模时间序列数据的特征提取与模型训练。其工作流程包括数据格式转换、特征提取和选择,并提供可视化工具帮助理解特征分布及与目标变量的关系。
75 16
Python时间序列分析:使用TSFresh进行自动化特征提取
|
1月前
|
数据采集 Web App开发 数据可视化
Python用代理IP获取抖音电商达人主播数据
在当今数字化时代,电商直播成为重要的销售模式,抖音电商汇聚了众多达人主播。了解这些主播的数据对于品牌和商家至关重要。然而,直接从平台获取数据并非易事。本文介绍如何使用Python和代理IP高效抓取抖音电商达人主播的关键数据,包括主播昵称、ID、直播间链接、观看人数、点赞数和商品列表等。通过环境准备、代码实战及数据处理与可视化,最终实现定时任务自动化抓取,为企业决策提供有力支持。
|
1月前
|
存储 安全 数据可视化
用Python实现简单的任务自动化
本文介绍如何使用Python实现任务自动化,提高效率和准确性。通过三个实用案例展示:1. 使用`smtplib`和`schedule`库自动发送邮件提醒;2. 利用`shutil`和`os`库自动备份文件;3. 借助`requests`库自动下载网页内容。每个案例包含详细代码和解释,并附带注意事项。掌握这些技能有助于个人和企业优化流程、节约成本。
70 3
|
Python
Python办公自动化--Word、Excel、PDF
python操作excel主要用到openpyxl库。其主要针对xlsx格式的excel进行读取和编辑。下面简单介绍其使用方法及命令。除openpyxl库外,还有xlwt及xlwd也可以对excel表格实现同样操作。
175 0
Python办公自动化--Word、Excel、PDF
|
存储 Python
Python办公自动化之从Word到Excel
大家好,今天有一个公务员的小伙伴委托我给他帮个忙,大概是有这样一份Word(由于涉及文件私密所以文中的具体内容已做修改
|
2月前
|
人工智能 数据可视化 数据挖掘
探索Python编程:从基础到高级
在这篇文章中,我们将一起深入探索Python编程的世界。无论你是初学者还是有经验的程序员,都可以从中获得新的知识和技能。我们将从Python的基础语法开始,然后逐步过渡到更复杂的主题,如面向对象编程、异常处理和模块使用。最后,我们将通过一些实际的代码示例,来展示如何应用这些知识解决实际问题。让我们一起开启Python编程的旅程吧!
|
2月前
|
存储 数据采集 人工智能
Python编程入门:从零基础到实战应用
本文是一篇面向初学者的Python编程教程,旨在帮助读者从零开始学习Python编程语言。文章首先介绍了Python的基本概念和特点,然后通过一个简单的例子展示了如何编写Python代码。接下来,文章详细介绍了Python的数据类型、变量、运算符、控制结构、函数等基本语法知识。最后,文章通过一个实战项目——制作一个简单的计算器程序,帮助读者巩固所学知识并提高编程技能。

热门文章

最新文章

推荐镜像

更多