本篇博客为大家带来 Python 操作 docx 文档相关知识点。
主要涉及的内容为python-docx
,一款可以操作 Word 文档(仅支持 docx)的第三方库。
文章目录
写在前面创建一个文档先实现第一步,写入一个标题添加文字段落列表的添加图片的添加表格添加相关样式设置页眉和页脚 订阅时间写在前面
python-docx
不支持doc
文档,一定要注意该点,如果使用doc
文档,需要提前将其用 Word 相关软件转换为docx
格式。doc
和docx
是存在本质差异的,一个是二进制,另一个 XML 格式的文件。
模块的安装pip install python-docx
。
以下网址首先准备好
官方手册:https://python-docx.readthedocs.io/en/latest/index.htmlpypi 官方地址:/project/python-docx/
资料准备完毕,即可进入编码环节。
创建一个文档
第一个需求,创建一个文档,并在里面写入各种信息。
先实现第一步,写入一个标题
注意下文中的add_heading()
函数的用法。
from docx import Document# 创建 Document 对象,等价于在电脑上打开一个 Word 文档document = Document()# 在 Word 文档中添加一个标题document.add_heading('这是一个标题',level=0)# 保存文档document.save('demo.docx')
添加文字段落
注意下文中add_paragraph()
函数添加段落,使用add_run()
追加文本
from docx import Document# 创建 Document 对象,等价于在电脑上打开一个 Word 文档document = Document()# 在 Word 文档中添加一个标题document.add_heading('这是一个标题', level=0)# 文档添加段落p = document.add_paragraph('这是白给的段落')# 添加带样式的文字# 添加段落,文本可以包含制表符(\t)、换行符(\n)或回车符(\r)等# add_run() 在段落后面追加文本p.add_run('\n我倾斜了').italic = True # 添加一个倾斜文字p.add_run('\n我加粗了').bold = True # 添加一个加粗文字# 保存文档document.save('demo.docx')
在段落前面增加文字
p.add_run('\n我倾斜了').italic = True # 添加一个倾斜文字p.add_run('\n我加粗了').bold = True # 添加一个加粗文字# 段落前面插入内容prep_p = p.insert_paragraph_before('段落之前插入内容')
段落还可以添加分页符,代码如下所示:
# 段落前面插入内容prep_p = p.insert_paragraph_before('段落之前插入内容')document.add_page_break()p1 = document.add_paragraph('新页新段落')
列表的添加
无序列表的添加
# 添加列表(前面一个小圆点)document.add_paragraph('我前面是小圆点', style='List Bullet')# 添加列表(前面一个小圆点)document.add_paragraph('第二个小圆点', style='List Bullet')
有序列表的添加
# 添加列表(前面数字)document.add_paragraph('我前面是数字', style='List Number')# 添加列表(前面数字)document.add_paragraph('第二个数字', style='List Number')
图片的添加
Document 对象具备的方法如下所示:
add_heading(self, text='', level=1)
:添加标题;add_page_break(self)
:分页符;add_paragraph(self, text='', style=None)
:添加段落;add_picture(self, image_path_or_stream, width=None, height=None)
:添加图片;add_section(self, start_type=2)
:添加节;add_table(self, rows, cols, style=None)
:添加表格;
本部分重点学习add_picture()
方法。
document.add_picture(r"../9.png", width=Inches(1))
add_picture()
函数中参数image_path_or_stream
可以为相对地址或者绝对地址,也可以是一个图片数据流,上述代码中Inches
表示英寸,除此之外,python-docx
还提供了厘米(Cm)
,如设置 1厘米:Cm(1)
,使用的时候需要提前导入from docx.shared import Inches, Cm
。
表格添加
使用add_table()
函数,可以在 Word 文档中添加表格。
p1 = document.add_paragraph('新页新段落')# 添加一个 2×2 表格table = document.add_table(rows=2, cols=2)# 获取第1行第2列单元格cell = table.cell(0, 1)# 设置单元格文本cell.text = '第1行第2列'# 获取第2行row = table.rows[1]row.cells[0].text = '橡皮擦'row.cells[1].text = '乔喻'
学习的时候注意一下相关注释,即可掌握该部分内容。
相关样式设置
设置格式需要用add_run()
,直接使用add_paragraph()
生成的段落不能直接设置字体等样式。
# 模块的导入from docx.shared import Pt, Cm, Inchesfrom docx.oxml.ns import qnfrom docx.enum.text import WD_ALIGN_PARAGRAPHfrom docx.shared import RGBColor# 一级标题 level=0head0 = document.add_heading(level=0)# 标题居中head0.alignment = WD_ALIGN_PARAGRAPH.CENTERtitle_run = head0.add_run('这是一个居中的标题', )title_run.font.size = Pt(24)# 标题英文字体title_run.font.name = 'Times New Roman'# 标题中文字体title_run.element.rPr.rFonts.set(qn('w:eastAsia'), '微软雅黑')# 字体颜色title_run.font.color.rgb = RGBColor(4, 60, 169)
其中WD_ALIGN_PARAGRAPH
对象表示段落对其的方式,其值包括如下内容
WD_ALIGN_PARAGRAPH. LEFT
:左对齐;WD_ALIGN_PARAGRAPH. CENTER
:居中对其;WD_ALIGN_PARAGRAPH. RIGHT
:右对齐;WD_ALIGN_PARAGRAPH. JUSTIFY
:两端对齐;
行距,段间距
line_spacing
属性用来设置行距,space_before
表示段前距,space_after
表示段后距。
斜体,下划线,粗体设置
font.italic = True #设置斜体font.underline = True #设置下划线font.bold = True #设置粗体
首行缩进
paragraph_format_line_indent
可以设置缩进值。
其它设置
除了上述内容外,还可以通过document.styles.add_style('textstyle', WD_STYLE_TYPE. PARAGRAPH)
,使用add_style()
方法创建新的样式对象,后续就可以通过提供的属性进行样式设置,设置字体使用font.size
,设置字体颜色为font.color
。
然后在添加段落的时候,就可以应用该属性了。
from docx.shared import RGBColorfrom docx.enum.style import WD_STYLE_TYPEstyle = document.styles.add_style('textstyle', WD_STYLE_TYPE.PARAGRAPH)# 字体大小style.font.size = Pt(16)# 字体颜色style.font.color.rgb = RGBColor(66, 100, 0)p1 = document.add_paragraph('神人橡皮擦',style=style)
页眉和页脚
页眉和页脚可以直接设置,参考代码如下所示
header = document.sections[0].headerheader.add_paragraph('橡皮擦的页眉')
页脚设置
footer = document.sections[0].footer
订阅时间
今天是持续写作的第 277 / 365 天。
可以关注我,点赞我、评论我、收藏我啦。
更多精彩
Python 爬虫 100 例教程导航帖(连续3年,不断更!)👇👇👇扫码加入【78技术人】~ Python 事业部👇👇👇,源码也在这