别再问我python怎么操作Word了!

区块链农夫
• 阅读 156

别再问我python怎么操作Word了!
作者:陈熹

来源:早起Python

在之前的自动化系列文章中,我们分别讲解过python操作Excel利器openpyxl,也讲过python操作PDF的几种方式,今天我们将通过代码讲解Python操作Word文档docx的常用方法。

安装

docx是一个非标准库,需要在命令行(终端)中使用pip即可安装

pip install python-docx

一定要注意,安装的时候是python-docx而实际调用时均为docx!

前置知识

别再问我python怎么操作Word了!

Word中一般可以结构化成三个部分:

  • 文档Document
  • 段落Paragraph
  • 文字块Run

也就是Document - Paragraph - Run三级结构,这是最普遍的情况。其中文字块Run最难理解,并不能完成按照图中所示,两个符号之间的短句是文字块。

通常情况下可以这么理解,但假如这个短句子中有多种不同的 样式,则会被划分成多个文字块,以图中的第一个黄圈为例,如果给这个短句添加一些细节?

别再问我python怎么操作Word了!

此时就有4个文字块,同时有时候一个Word文档中是存在表格的,这时就会新的文档结构产生

别再问我python怎么操作Word了!

这时的结构非常类似Excel,可以看成Document - Table - Row/Column - Cell四级结构

Word读取

1.打开Word

from docx import Document

path = ...

wordfile = Document(path)

  1. 获取段落

一个word文件由一个或者多个paragraph段落组成

paragraphs = wordfile.paragraphs

print(paragraphs)

  1. 获取段落文本内容

用.text获取文本

for paragraph in wordfile.paragraphs:

print(paragraph.text)

  1. 获取文字块文本内容

一个paragraph段落由一个或者多个run文字块组成

for paragraph in wordfile.paragraphs:

for run in paragraph.runs:

print(run.text)

  1. 遍历表格

上面的操作完成的经典三级结构的遍历,遍历表格非常类似

按行遍历

for table in wordfile.tables:

for row in table.rows:

for cell in row.cells:

print(cell.text)

按列遍历

for table in wordfile.tables:

for column in table.columns:

for cell in column.cells:

print(cell.text)

写入Word

  1. 创建Word

只要不指定路径,就默认为创建新Word文件

from docx import Document

wordfile = Document()

  1. 保存文件

对文档的修改和创建都切记保存

wordfile.save(...)

... 放需要保存的路径

  1. 添加标题

wordfile.add_heading(…, level=…)

别再问我python怎么操作Word了!

  1. 添加段落

wordfile.add_paragraph(...)

wordfile = Document()

wordfile.add_heading('一级标题', level=1)

wordfile.add_paragraph('新的段落')

  1. 添加文字块

wordfile.add_run(...)

别再问我python怎么操作Word了!

  1. 添加分页

wordfile.add_page_break(...)

别再问我python怎么操作Word了!

  1. 添加图片

wordfile.add_picture(..., width=…, height=…)

别再问我python怎么操作Word了!

设置样式

  1. 文字字体设置

别再问我python怎么操作Word了!

2.文字其他样式设置

from docx import Document

from docx.shared import RGBColor, Pt

wordfile = Document(file)

for paragraph in wordfile.paragraphs:

for run in paragraph.runs:

run.font.bold = True # 加粗

run.font.italic = True # 斜体

run.font.underline = True # 下划线

run.font.strike = True # 删除线

run.font.shadow = True # 阴影

run.font.size = Pt(20) # 字号

run.font.color.rgb = RGBColor(255, 0, 0) # 字体颜色

  1. 段落样式设置

默认对齐方式是左对齐,可以自行修改

别再问我python怎么操作Word了!

小结

以上就是如何用Python中的docx模块实现Word中的常用操作,只要明白什么类型的操作可以用Python执行,并能在之后遇到繁琐的任务时想到使用Python即可,以下是几个利用该模块实现办公自动化的案例,希望能够对你有所帮助。

点赞
收藏
评论区
推荐文章
blmius blmius
4年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Wesley13 Wesley13
4年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
梦
4年前
微信小程序new Date()转换时间异常问题
微信小程序苹果手机页面上显示时间异常,安卓机正常问题image(https://imghelloworld.osscnbeijing.aliyuncs.com/imgs/b691e1230e2f15efbd81fe11ef734d4f.png)错误代码vardate'2021030617:00:00'vardateT
Stella981 Stella981
4年前
Python Challenge Level 18
初学Python,挑战一下流行的PythonChallenge,很不幸,卡在了18关~~被字符字节码之间的转换搞得焦头烂额,不过终于搞定了还是很happy的~~~主要的问题就是16进制形式的字符如何转成字节码(注意:不是encoding)如:\'89','50','4e','47','0d','0a','1a','0a','00
Stella981 Stella981
4年前
Python3:sqlalchemy对mysql数据库操作,非sql语句
Python3:sqlalchemy对mysql数据库操作,非sql语句python3authorlizmdatetime2018020110:00:00coding:utf8'''
Stella981 Stella981
4年前
Scapy 从入门到放弃
0x00前言最近闲的没事,抽空了解下地表最强的嗅探和收发包的工具:scapy。scapy是一个python模块,使用简单,并且能灵活地构造各种数据包,是进行网络安全审计的好帮手。0x01安装因为2020年python官方便不再支持python2,所以使用python3安装。!(https://oscimg.oschina.net/os
Stella981 Stella981
4年前
Python之time模块的时间戳、时间字符串格式化与转换
Python处理时间和时间戳的内置模块就有time,和datetime两个,本文先说time模块。关于时间戳的几个概念时间戳,根据1970年1月1日00:00:00开始按秒计算的偏移量。时间元组(struct_time),包含9个元素。 time.struct_time(tm_y
Wesley13 Wesley13
4年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Python进阶者 Python进阶者
2年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这