1 安装模块

Windows用户打开命令行输入:pip install python-docx

Mac用户打开终端/Terminal输入:pip3 install python-docx

导入模块:import docx

如果无法安装,可以转换为国内清华镜像源,Windows系统操作如下:

在cmd模式下输入

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple python-docx

2 读取Word文档内容

2.1 文档结构

注意:一个run对象是相同样式文本的延续,如颜色、字体、粗细、斜体不同,文字加粗和后面没有加粗操作的,属于不同的文字块。

2.2 获取段落和文字块

1)获取段落paragraph

① python-docx提取文字

doc.paragraphs -> 得到一个列表,包含每个段落实例

len(doc.paragraphs)-> 得到段落的个数

paragraph.text -> 得到该段落的文字内容

import docx
from docx import Document
# 绝对路径写法,为方便阅读,以下都采用相对路径。
# doc = Document(r"C:\Users\Administrator\Desktop\这是一个文档.docx")
doc = Document("这是一个文档.docx")
print("段落数:"+str(len(doc.paragraphs)))
print(len(doc.paragraphs))#输出第一段的内容,索引从0开始
para = doc.paragraphs[0]
print("第一段的内容是",para.text,sep=':')
print("----------------------------------------------------------------")#输出每一段的内容
for para in doc.paragraphs:print(para.text)
print("----------------------------------------------------------------")#输出段落编号及段落内容
for i in range(len(doc.paragraphs)):print("第"+str(i)+"段的内容是:"+doc.paragraphs[i].text)

2)获取文字块Run

paragraph.runs -> 得到一个列表,包含每个文字块

run.text -> 得到该文字块的文字内容

import docx
from docx import Documentdoc = Document("这是一个文档.docx")#输出第一段第一个文字块的内容,索引从0开始
para1 = doc.paragraphs[0]
runs = para1.runs[0]
print("第一段第一个文字块的内容是",runs.text,sep=':')
print("----------------------------------------------------------------")
for i in range(len(doc.paragraphs)):paragraph = doc.paragraphs[i]runs = paragraph.runsfor run in paragraph.runs:print("第"+str(i+1)+"个文字块的内容是:"+run.text)

2.3 获取整个文本

读取完整的Word文本内容。这里,自定义一个函数将全部的paragraph段落内容存起来,每个paragraph段落之间用换行符\n隔开即可。

import docxdef getText(fileName):doc = docx.Document(fileName)TextList = []for paragraph in doc.paragraphs:TextList.append(paragraph.text)return '\n'.join(TextList)fileName = r'example3.docx'
print(getText(fileName))

3 向文档中写入内容

3.1 添加文字

1)添加标题

doc.add_heading(“标题名称”,level=标题等级),level=可以省略

整数 0 表示标题是 Title 样式,这用于文档的顶部。整数 1 到 45是不同的标题层次,是主要的标题, 45是最低层的子标题

import docx
doc=docx.Document()doc.add_heading('标题0',0)
doc.add_heading('标题1',1)
doc.add_heading('标题2',2)
doc.add_heading('标题3',3)
doc.save('添加标题.docx')

补充:获取标题

import docx
doc=docx.Document("添加标题.docx")for p in doc.paragraphs:style_name = p.style.nameif style_name.startswith('Heading'):print(style_name,p.text,sep=';')

2)添加段落

doc.add_paragraph(“段落文字内容”)

import docx
from docx import Documentdoc=docx.Document()
paragraph1 = doc.add_paragraph("这是一个段落")
paragraph2 = doc.add_paragraph("这是第二个段落")#插入有序列表,段落的前面会有序号123
doc.add_paragraph('把冰箱门打开',style='List Number')
doc.add_paragraph('把大象装进去',style='List Number')
doc.add_paragraph('把冰箱门关上',style='List Number')
#插入无序列表,段落的前面没有序号
doc.add_paragraph('把冰箱门打开',style='List Bullet')
doc.add_paragraph('把大象装进去',style='List Bullet')
doc.add_paragraph('把冰箱门关上',style='List Bullet')doc.save("添加段落.docx")

3)添加文字块

paragraph.add_run(‘文字内容’)

import docx
from docx import Documentdoc=docx.Document()
paragraph1 = doc.add_paragraph()
paragraph2 = doc.add_paragraph()
paragraph3 = doc.add_paragraph()
paragraph1.add_run('加粗').bold = True
paragraph2.add_run('斜体').italic = True
paragraph3.add_run('普通')
doc.save("添加文字块.docx")

3.2 添加图片和表格

1)添加图片

doc.add_picture(图片地址)

import docx
from docx import Documentdoc=docx.Document()
doc.add_picture('图片.png')doc.save("添加图片.docx")
  • 添加图片,给定宽度或高度

doc.add_picture(图片地址,width=宽度,height=高度)

只给一个宽度或高度,另一个的尺寸会自动计算。

import docx
from docx import Document
from docx.shared import Cmdoc=docx.Document()
doc.add_picture('图片.png',width=Cm(5),height=Cm(5))doc.save("添加图片.docx")

2)添加表格

doc.add_table(rows=多少行, cols=多少列,表格形式)

写入的数据不得超过规定的行和列。

import docx
from docx import Document
from docx.shared import Cmdoc=docx.Document()list1 = [["姓名", "性别", "家庭地址"],["李雷", "男", "湖北省"],["韩梅梅", "女", "北京市"],["夏洛特", "男", "广东省"],["马冬梅", "女", "湖南省"]
]
list2 = [["姓名", "性别", "家庭地址"],["貂蝉", "女", "河北省"],["杨贵妃", "女", "贵州省"],["西施", "女", "山东省"]
]table1 = doc.add_table(rows=5, cols=3)
for row in range(5):cells = table1.rows[row].cellsfor col in range(3):cells[col].text = str(list1[row][col])
doc.add_paragraph("--------------------------------------------------------------------------------------------------------------------")
table2 = doc.add_table(rows=4, cols=3)
for row in range(4):cells = table2.rows[row].cellsfor col in range(3):cells[col].text = str(list2[row][col])
doc.add_paragraph("--------------------------------------------------------------------------------------------------------------------")
#插入一个6行6列的表格
table3 = doc.add_table(rows=6, cols=6)
for i in range(0, 6):for j in range(0, 6):table3.cell(i, j).text = "第{i}行{j}列".format(i=i + 1, j=j + 1)
doc.save("添加表格.docx")

补充:提取表格内容并写入Excel中。

from docx import Document
from openpyxl import Workbookdoc = Document("添加表格.docx")
# tables[0]表示提取第一个表格,tables[1]表示提取第二个表格,依次类推。
t0 = doc.tables[0]workbook = Workbook()
sheet = workbook.activefor i in range(len(t0.rows)):list1 = []for j in range(len(t0.columns)):list1.append(t0.cell(i,j).text)sheet.append(list1)
workbook.save(filename = "来自word中的表.xlsx")# 遍历所有表格
for table in doc.tables:print ('----table------')for row in table.rows:  # 遍历表格的所有行# 按原格式输出数据# row_str = '\t'.join([cell.text for cell in row.cells])# print(row_str)# 遍历所有行的所有单元格内容for cell in row.cells:print (cell.text, '\t')

3.2 添加分行

同样,我们还可换行与换页操作。

要添加换行符(而不是开始一个新的段落),可以在 Run 对象上调用 add_break()方法,换行符将出现在它后面。如果希望添加换页符,可以将 docx.text.WD_BREAK.PAGE作为唯一的参数,传递给 add_break()

import docxdoc = docx.Document()
p1 = doc.add_paragraph('这是一个段落')
p1.add_run('加粗的一句话').bold = True
# 换行
doc.paragraphs[0].runs[1].add_break()
doc.add_paragraph().add_run('普通')
doc.save('换行.docx')

3.4 添加分页

doc.add_page_break()

import docx
from docx import Documentdoc=docx.Document()
doc.add_paragraph('this is on the first page')
doc.add_page_break()
doc.add_paragraph('this is on the seconed page')doc.save("添加分页.docx")'''
换页只需要把docx.enum.text.WD_BREAK.PAGE作为唯一的参数传递给add_break
如果是换行的话就不需要使用docx.enum.text.WD_BREAK.PAGE参数
doc.paragraphs[0].runs[0].add_break(docx.enum.text.WD_BREAK.PAGE)
'''

4 调整Word文档样式

这方面主要是正文样式与标题样式。比如,我们可以设置正文样式为 微软雅黑字体,字号12,缩进,间距等等;设置标题样式为 微软雅黑字体,字号14,删除段落后间距等等。

在我们Python处理Word的时候,段落样式可以应用于 Paragraph 对象,字符样式可以应用于 Run 对象,链接的样式可以应用于这两种对象。可以将 ParagraphRun 对象的 style 属性设置为一个字符串,从而设置样式。这个字符串应该是一种样式的名称。如果 style 被设置为 None,就没有样式与 ParagraphRun 对象关联。

简单介绍Run对象上的字符属性。关于更多的介绍,我们放在第三期的 详解Python写Word里

对于Run对象的字符text属性,都有3个状态:True(启用)、False(禁用)和None(默认)。

text属性有哪些?看下表:

属性 描述
bold 文本以粗体出现
italic 文本以斜体出现
underline 文本带下划线
strike 文本带删除线
double_strike 文本带双删除线
all_caps 文本以大写首字母出现
small_caps 文本以大写首字母出现,小写字母小两个点
shadow 文本带阴影
outline 文本以轮廓线出现,而不是实心
rtl 文本从右至左书写
imprint 文本以刻入页面的方式出现
emboss 文本以凸出页面的方式出现

4.1 对文字字体样式进行修改

run.font.样式 = xxx

from docx import Document
from docx.shared import Pt,RGBColor #字号,颜色
from docx.oxml.ns import qn #设置中文字体需要该模块doc = Document()
paragraph1 = doc.add_paragraph("这是一个段落")
paragraph2 = doc.add_paragraph("这是第二个段落")
for paragraph in doc.paragraphs:for run in paragraph.runs:run.font.bold = Truerun.font.italic = Truerun.font.underline = Truerun.font.strike = Truerun.font.shadow = Truerun.font.size = Pt(18)run.font.color.rgb = RGBColor(255,255,0)run.font.name = "微软雅黑"# 设置像微软雅黑这样的中文字体,必须添加下面2行代码r = run._element.rPr.rFontsr.set(qn("w:eastAsia"),"微软雅黑")
doc.save("修改字体样式.docx")

4.2 修改段落样式

1)对齐样式

doc.paragraphs.alignment = 对齐方式

from docx.enum.text import WD_ALIGN_PARAGRAPH

paragraphs.alignment = WD_ALIGN_PARAGRAPH.CENTER

可选的对齐方式:

LEFT,CENTER,RIGHT,JUSTIFY,DISTRIBUTE,JUSTIFY_MED,JUSTIFY_HI,JUSTIFY_LOW,THAI_JUSTIFY

from docx import Document
from docx.enum.text import WD_ALIGN_PARAGRAPHdoc = Document()
paragraph1 = doc.add_paragraph("这是一个段落")
paragraph2 = doc.add_paragraph("这是第二个段落")# [0]表示第一个段落,依次类推
doc.paragraph[0].alignment = WD_ALIGN_PARAGRAPH.CENTER
# 这里设置的是居中对齐
doc.save("修改段落样式.docx")

2)行间距调整

paragraph.paragraph_format.line_spacing = 行间距

注意用浮点数,5.0就表示5倍行间距

from docx import Document
from docx.enum.text import WD_ALIGN_PARAGRAPHdoc = Document()
paragraph1 = doc.add_paragraph("这是一个段落")
paragraph2 = doc.add_paragraph("这是第二个段落")for paragraph in doc.paragraphs:paragraph.paragraph_format.line_spacing = 5.0
doc.save("修改行间距.docx")

3)段前与段后间距

paragraph.paragraph_format.space_before = Pt(12)

Pt(12)表示12磅

from docx import Document
from docx.shared import Pt
doc = Document()
paragraph1 = doc.add_paragraph("这是一个段落")
paragraph2 = doc.add_paragraph("这是第二个段落")for paragraph in doc.paragraphs:paragraph.paragraph_format.space_before = Pt(24)paragraph.paragraph_format.space_after = Pt(12)
doc.save("修改段前与段后间距.docx")

4)标题样式

Python自动化办公 - 对Word的操作(Python-docx的基本使用)相关推荐

  1. Python自动化办公:word文件操作教程

    在后台回复[阅读书籍] 即可获取python相关电子书~ Hi,我是山月. 之前给大家完整的介绍了用python操作excel的几个库:xlrd.xlwt.openpyxl. 山月也已经整理好了,还没 ...

  2. 2021-01-26 Python自动化办公-处理word文档

    Python自动化办公-处理word文档 年底项目投标,需要整理大量的内容,标书的很多内容是其实是之前的标书重复的,可以把对应的各个部分内容合并,然后再处理格式等.如果采用常规操作每次操作需要打开子目 ...

  3. python自动化办公入门书籍推荐-盘点使用Python进行自动化办公所需要的知识点

    知乎上有人提问:用python进行办公自动化都需要学习什么知识呢? 这可能是很多非IT职场人士面临的困惑,想把python用到工作中,却不知如何下手?python在自动化办公领域越来越受欢迎,批量处理 ...

  4. python自动化办公培训排名-盘点使用Python进行自动化办公所需要的知识点

    三军可夺帅也,匹夫不可夺志也. 知乎上有人提问:用python进行办公自动化都需要学习什么知识呢? 这可能是很多非IT职场人士面临的困惑,想把python用到工作中,却不知如何下手?python在自动 ...

  5. python自动化办公:word篇。职场高手不是梦。

    工具包安装 使用的库:docx python 没有自带.需要安装. 若运行出现:ModuleNotFoundError: No module named 'exceptions' 则说明安装失败,需要 ...

  6. python自动化办公能做什么-用Python自动办公,做职场高手(完结)

    教程目录: ┣━07.S2 Word自动化处理,又快又好做文档 ┃ ┣━36 本章介绍 ┣━08.[Word]S2-1 轻松用Python快速生成Word文档 ┃ ┣━45.[真实案例]S2-1-3 ...

  7. python自动化办公入门书籍-视频教程-零基础Python自动化办公(漫画版)-Python

    零基础Python自动化办公(漫画版) 现任某大型游戏公司后端工程师,阿里云大学云学院导师,中国人工智能协会高级会员,HackPython工作室负责人,曾出版书籍<深入浅出生成对抗网络:原理剖析 ...

  8. python自动化办公书籍_2020年最新 Python自动化办公(资料完整)

    温馨提示:本信息由[会员:胖子哥]搜集整理发布,版权归原作者及发布者所有,您如有异议请 举报 或者 版权申诉. 2020年最新 Python自动化办公(资料完整) 教材 软件 源码 课件 视频 有没有 ...

  9. Python自动化办公:ppt文件操作教程

    在后台回复[阅读书籍] 即可获取python相关电子书~ Hi,我是山月. 之前和大家介绍了python操作excel和word文件的教程,今天来和大家介绍下python对ppt的操作. 在公众号后台 ...

最新文章

  1. CSS3 Flexbox 弹性盒与 css3 阴影效果的演示
  2. This 在 C# 中的含义
  3. python创建数据库字数不限制_textarea字数限制方法一例
  4. Python-模块导入-63
  5. 用FTP命令实现自动下载和上载文件
  6. EditPlus Version 3 价格 代理商 销售价格 正版软件价格
  7. BP 神经网络的非线性系统建模——非线性函数拟合
  8. 红警安装中出现的问题 win10,黑屏和无法联机对战(缺少ipx协议)的问题。
  9. 考研高等数学张宇30讲笔记——第十二讲 二重积分
  10. Skype for business 界面自动弹出打开
  11. VUE使用百度地图API实现三维地球
  12. 微信jssdk常见错误及解决方法
  13. ZOJ - Triathlon(线性规划+半平面交)
  14. [转]Apache Ignite——新一代数据库缓存系统
  15. 【uva12345】Dynamic len
  16. 漂亮实用的jQuery倒计时插件特效代码
  17. diagram使用(BLOCK DIAGRAM)
  18. AutoDL 算力云 服务器租用教程
  19. MAC解决Python绘图中文无法显示问题
  20. 【无人驾驶系列十】无人驾驶硬件平台设计

热门文章

  1. 2022年学生面试不写商城项目那就让自己假设处于工作状态的环境去学习吧!
  2. 找到自己的赚钱模式,赚自己能赚的钱
  3. 机器人焊钳选型_机器人焊钳
  4. matlab给xlabel/ylabel设置上标下标
  5. 艾美捷EndoGrade卵清蛋白,不含内毒素
  6. 内蒙古大学计算机考研资料汇总
  7. 蜘蛛纸牌java设计思路_Java课程设计蜘蛛纸牌 实战项目技巧总结
  8. 电视机防近视预警系统c语言,远程功能视觉会诊系统:预防近视可先从规范看电视做起...
  9. 微软计算机系统的组成与功能,体系结构概述 - Configuration Manager | Microsoft Docs
  10. 基于PaddleOCR复现RFLearning