Python自动化之Docx文档处理(一)

news/2025/10/29 14:29:45/文章来源:https://www.cnblogs.com/singless233/p/19174336

1 基本概念

1.1 python-docx模块

相信大家在日常工作中,免不了要处理word文档,今天就介绍一个能通过python处理word文档的模块,python-docx[1]。

安装python-docx模块

pip install python-docx

然后通过官方的python代码例子来了解python-docx的功能

from docx import Document
from docx.shared import Inchesdocument = Document()
document.add_heading('Document Title' , 0)p = document.add_paragraph('A plain paragraph having some')
p.add_run('bold').bold = True
p.add_run(' and some ')
p.add_run('italic.').italic = Truedocument.add_heading('Heading, level 1', level=1)
document.add_paragraph('Intense quote', style='Intense Quote')document.add_paragraph('first item in unordered list', style='List Bullet'
)document.add_paragraph('first item in ordered list', style='List Number'
)#document.add_picture('touxiang.jpg', width=Inches(1.25))records = ((3, '101', 'Spam'),(7, '422', 'Eggs'),(4, '631', 'Spam, spam, eggs, and spam')
)table = document.add_table(rows=1, cols=3)
hdr_cells = table.rows[0].cells
hdr_cells[0].text = 'Qty'
hdr_cells[1].text = 'Id'
hdr_cells[2].text = 'Desc'for qty, id, desc in records:row_cells = table.add_row().cellsrow_cells[0].text = str(qty)row_cells[1].text = idrow_cells[2].text = descdocument.add_page_break()
document.save('singless.docx')

代码解析

  • document = Document():打开一个基于默认模板的空白文档
  • add_heading:增加标题函数,text用于定义标题名,level表示标题等级。标题等级限制在0~9。
  • add_paragraph:新增段落,style指定段落前的编号类似。List Bullet 2表示2级无序段落。List Number 2表示2级有序段落[2]。
  • add_run:往段落后添加内容。该函数有两个属性,bold和.italic,作用分别是加粗和使用斜体。注意添加文本时可以按需要在文本前后要添加空格,add_run不会自动添加空格。
  • add_picture:新增图片,width指定宽度、height指定高度。指定高度和宽度需要从docx.shared中导入Inches
  • add_table:创建一个表格,rows为行, cols为列
  • table.rows[0].cells:读取第一行的所有内容。下标从0开始。table.rows[0]表示第一行,cells用来获取第一行中的所有单元格。要确定表格有几行几列可以通过len函数来确认。len(table.rows)、len(table.columns)
  • hdr_cells[0].text:前面已经把第一行赋值给了hdr_cells,text可以用来填充单元格里的内容。这里的hdr_cell[0]指第一行的第一列
  • add_row:新增一行
  • add_page_break:新增一个分页符
  • save:保存word文档

运行代码,该文档最终展现形式如下

2 段落操作

word操作,最多的就是对段落的操作,下面介绍下一些常用的操作在python中如何实现。

2.1 字体格式调整

我们直接通过python代码进行演示如何调整字体格式,字体颜色等

from docx import Document
from docx.enum.text import *
from docx.oxml.ns import qn
from docx.shared import Pt, RGBColor
from docx.text.paragraph import Paragraphdoc = Document()paragraph1 = doc.add_paragraph("这是第1个段落") 
run1 = paragraph1.add_run(" 追加的文字")
run1.bold = True  # 加粗
run1.italic = True  # 斜体
run1.underline = True  # 下划线paragraph2 = doc.add_paragraph("这是第2个段落")
run2 = paragraph2.add_run(" 这是第2段追加的文字")
run2.font.name = "Times New Roman"  # 将段落里的西文设置为新罗马字体
run2.element.rPr.rFonts.set(qn('w:eastAsia'), '宋体')  # 设置段落中的中文为宋体
run2.font.size = Pt(30)  # 字体大小
run2.font.bold = False  # 是否加粗
run2.font.italic = False  # 是否斜体
run2.font.underline = False  # 是否下划线paragraph3 = doc.add_paragraph("这是第3个段落")
run3 = paragraph3.add_run(" 这是第3段追加的文字")
run3.font.shadow = True  # 是否阴影
run3.font.strike = True  # 是否删除线
# run.font.double_strike = True  # 是否双删除线
run3.font.color.rgb = RGBColor(56, 36, 255)  # 字体颜色
# run1.font.color.rgb = RGBColor.from_string("ff0056")  # 字体颜色
run3.font.highlight_color = WD_COLOR_INDEX.YELLOW  # 文本高亮颜色,此次设置为黄色doc.save('singless1.docx')

运行代码后,word文档效果如下

2.2 段落格式调整

首行缩进,行间距,段前段后距离调整

from docx import Document
from docx.oxml.ns import qn
from docx.shared import Ptdocument = Document()paragraph1 = document.add_paragraph()
# paragraph.line_spacing_rule = WD_LINE_SPACING.EXACTLY  # 行距固定值
# paragraph.line_spacing_rule = WD_LINE_SPACING.MULTIPLE  # 多倍行距
# paragraph1.paragraph_format.line_spacing = 1.5  # 行间距,1.5倍行距paragraph1.style.font.size = Pt(10.5)  ##设置字体大小为10.5磅
paragraph1.paragraph_format.first_line_indent = paragraph1.style.font.size * 2  ##首行缩进两个字符
paragraph1.paragraph_format.line_spacing = Pt(20)  # 行间距,固定值20磅
paragraph1.paragraph_format.first_line_indent = Pt(22)  # 首行缩进22磅
paragraph1.paragraph_format.space_before = Pt(30)  # 段前30磅
paragraph1.paragraph_format.space_after = Pt(15)  # 段后15磅run1 = paragraph1.add_run("美猴王享乐天真,何期有三五百载。一日,与群猴喜宴之间,忽然忧恼,堕下泪来。众猴慌忙罗拜道,“大王何为烦恼?”猴王道,“我虽在欢喜之时,却有一点儿远虑,故此烦恼。”")
run1.font.name = "Times New Roman"  # 设置西文是新罗马字体
run1.element.rPr.rFonts.set(qn('w:eastAsia'), '宋体')  # 设置段落中的中文为宋体paragraph2 = document.add_paragraph("众猴又笑道:“大王好不知足!我等日日欢会,在仙山福地,古洞神洲,不伏麟辖,不伏风凰管,又不伏人王拘末,自由自在,乃无量之福,为何远虑而忧也?”猴王道,“今日虽不归人王法律,不惧禽兽威服,将来年老血衰,暗中有间王老子管着,一旦身亡,可不枉生世界之中,不得久注天人之内?”")document.save('singless2.docx')

 

运行结果如下

 

段落对齐,左、右对齐、居中对齐

from docx import Document
from docx.enum.text import *document = Document()paragraph1 = document.add_paragraph("这是居中对齐段落")
paragraph1.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER  # 居中对齐document.add_paragraph("这是左对齐段落").alignment = WD_PARAGRAPH_ALIGNMENT.LEFT  # 左对齐
document.add_paragraph("这是右对齐段落").alignment = WD_PARAGRAPH_ALIGNMENT.RIGHT  # 右对齐
document.add_paragraph("这是两端对齐段落").alignment = WD_PARAGRAPH_ALIGNMENT.JUSTIFY  # 两端对齐
document.add_paragraph("这是分散对齐段落").alignment = WD_PARAGRAPH_ALIGNMENT.DISTRIBUTE  # 分散对齐document.save('singless3.docx')

 

运行结果如下

 

 

运行通过上面两个例子,我们了解了如何通过python代码完成对docx文档的常见操作。不过平常我们更常会遇到的场景可能是建立一个word模板,将通过python对数据进行处理填充到模板中,下一节介绍如何创建模板,并通过python填充数据。

3 参考资料

  • [1]
  • [2] 

关注公众号 singless,获取更多有价值的文章

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

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

相关文章

替换 Android APEX 下属动态库的方法

先确定要替换的库属于哪个 APEX 包,再替换库文件所属的整个 APEX 包。只单独替换 APEX 包下的库文件,会导致系统无法启动。Qidi Huang 2025.10.29 1. 确定要替换的库属于哪个 APEX 包 比如要替换 libaudioroute.so,…

配置管理工具-Confd

1 简介 1.1 Confd介绍 Confd是一个轻量级的配置管理工具。通过查询后端存储,结合配置模板引擎,保持本地配置最新,同时具备定期探测机制,配置变更自动reload。对应的后端存储可以是etcd,redis、zookeeper等。[1] 通…

探索Go语言性能优化:全面解析pprof工具

摘自:https://baijiahao.baidu.com/s?id=1846491710332725792&wfr=spider&for=pc go pprof作为Go语言性能优化的得力工具,其重要性不言而喻。然而,对于许多开发者来说,如何解读profile信息并有效利用ppro…

Bcache详解及踩坑记录

关注公众号 singless ,后台回复bcache,获取bcache相关资料1 介绍 1.1 背景介绍 Bcache是Linux内核块设备层的软件驱动,使用高速存储设备为传统机械磁盘做IO缓存,经常访问的热数据会缓存在固态硬盘中并直接返回给应…

HDD介质OSD新增SSD或NVME类型的DB或WAL分区

关注公众号singless,后台回复ceph可以获取文中相关脚本。 1 介绍 在ceph中,BlueStore使用RocksDB key-value数据库来管理内部元数据,比如从对象名称到磁盘上块位置的映射。一个对象的元数据在bluestore内称为Onode。…

什么是跨网域资源共享(CROS)

1 同源策略 浏览器的同源策略 - Web 安全 | MDNdeveloper.mozilla.org/zh-CN/docs/Web/Security/Same-origin_policy 同源策略是一种重要的安全机制,它限制一个源加载的文档或脚本如何与另一个源的资源进行交互。同源…

【生活】选购油烟机

前言: 主包家里的厨房在六楼,油烟可以直接从墙上预留通风口排出,所以以下内容是按主包的实际需求出发的性价比公式风量(\(m^3 / min\)):也就是吸力,经常爆炒的至少 20 \(m^3 / min\) 最好 静压(\(Pa\)):也就…

从经验到数据:MyEMS 如何推动能源管理的范式升级?

在 “双碳” 目标深化推进与能源结构转型加速的背景下,能源管理已从传统的 “降本降耗” 单一诉求,升级为 “效率提升、低碳转型、安全保障” 三位一体的核心需求。然而,长期以来,我国工业、建筑、园区等领域的能源…

2025 年试压泵厂家最新推荐榜,技术实力与市场口碑深度解析,展现国产设备卓越性能四缸电动/三缸电动/水管/大流量电动/柴油动力试压泵公司推荐

引言 为精准筛选出 2025 年试压泵领域兼具技术实力与市场认可度的优质品牌,通用机械工业协会泵业分会联合行业权威检测机构,开展了为期 3 个月的专项测评。测评采用 “多维量化 + 实地考察” 双轨模式,从企业综合实…

Ceph运维手册(基于P版本)

本文基于Ceph P版,适用于ceph-deploy部署非容器化部署场景。 完整版PDF下载链接请点击以下链接 https://mp.weixin.qq.com/s/57zn-a4zZ4Dc2mBhsa23PQ 修订记录版本 时间 修订人V1.0 2024年03月06号 singless目录 一、…

2025最新AI智能体学习路线图

零基础如何入门AI智能体?智能体来了为你梳理完整学习路径。 🧠智能体来了课程主体线路下图描绘了智能体学习的整体思路,细节内容颇多,今天给各位看官讲解部分,关注博主,详细细节后续会持续更新。大纲打造旨在解…

K8S如何查询PVC的已用容量和剩余可用容量

在业务中如果有数据持久化存储的需求就免不了要使用到PV、PVC,既然使用了PV和PVC那么它们的容量使用情况也是我们需要关注的。目前K8S并未提供接口让我们可以直接查询到PVC的容量使用情况,因此本文主要介绍K8S环境下…

学术会议会议合集 | 人工智能、未来教育 、智能控制 、计算科学 、传感器技术等EI会议合集

人工智能、未来教育 、智能控制 、计算科学 、传感器技术等EI会议合集2025年第二届人工智能与未来教育国际学术会议(AIFE 2025) 2025 2nd International Conference on Artificial Intelligence and Future Educatio…

完整教程:金融分析师技能提升路径与学习资源指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025 年水磨石厂家最新推荐榜,技术实力与市场口碑深度解析水磨石预制板/人造水磨石/水磨石地砖/水磨石成品地砖/彩色水磨石地砖公司推荐

随着无机水磨石、预制板等细分品类需求激增,市场品牌分化加剧。为破解采购难题,本次榜单依托建筑材料流通协会地坪委员会 2025 年度测评数据,采用 "四维评估体系":生产实力(占比 30%)涵盖厂房规模与自…

Unreal:如何调用DLL

说说我的方法吧,不知道正不正确,但是能用,哈哈哈哈,跟着官方的第三方库弄的打包dll那一套我就不赘述了,就说说拿到DLL和Lib怎么办 以官方模板创建得插件TestThird为例 将dll,lib文件放到TestThird\Source\ThirdP…

建筑矿山设备工厂:MyEMS 如何助力实现 30% 能源自给率与 ISO 50001 认证?

建筑矿山设备工厂作为典型的高能耗制造场景,其生产流程涉及大型机床加工、热处理、焊接、装配等环节,对电力、热力、燃料的需求旺盛。近年来,在 “双碳” 目标与能源成本上涨的双重压力下,工厂不仅需要降低对传统化…

lldpd介绍

1 介绍 lldpd是IEEE802.1AB (LLDP)协议的一种实现。目标是帮助定位所有设备的邻居设备。例如可以定位服务器某个网卡是接在交换机的哪个接口上。要使用该协议交换机上需要启用lldp协议,linux服务器上需要安装lldp相…

HarmonyOS6纯血鸿蒙开发

一、HarmonyOS 开发准备 1.成为华为开发者 在开始应用开发前,需要先完成以下准备工作。在华为开发者联盟网站上,注册成为开发者,并完成实名认证,从而享受联盟开放的各类能力和服务。 1.1 注册账号 如果您已经有华为…

2025年10月短视频营销公司实力榜:五强对比评测与选择指南

一、引言 短视频流量红利进入精细化运营阶段,企业主、市场总监、增长负责人普遍面临“投流贵、内容倦、转化弱”的三重夹击。对创业者而言,能否以可控成本跑通短视频获客闭环,直接决定现金流健康;对成熟品牌而言,…