Python操作word文档的示例详解
作者:梦想橡皮擦 发布时间:2021-11-10 02:54:51
写在前面
python-docx 不支持 doc 文档,一定要注意该点,如果使用 doc 文档,需要提前将其用 Word 相关软件转换为 docx 格式。 doc 和 docx 是存在本质差异的,一个是二进制,另一个 XML 格式的文件。
模块的安装 pip install python-docx
。
以下网址首先准备好
官方手册:https://python-docx.readthedocs.io/en/latest/index.html
pypi 官方地址:https://pypi.org/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, Inches
from docx.oxml.ns import qn
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.shared import RGBColor
# 一级标题 level=0
head0 = document.add_heading(level=0)
# 标题居中
head0.alignment = WD_ALIGN_PARAGRAPH.CENTER
title_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 RGBColor
from docx.enum.style import WD_STYLE_TYPE
style = 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].header
header.add_paragraph('橡皮擦的页眉')
页脚设置
footer = document.sections[0].footer
来源:https://juejin.cn/post/7054355419170340877
猜你喜欢
- 本文实例讲述了vue组件定义,全局、局部组件,配合模板及动态组件功能。分享给大家供大家参考,具体如下:一、定义一个组件定义一个组件:1. 全
- JSON编码支持的基本数据类型为 None , bool , int , float 和 str , 以及包含这些类型数据的lists,tu
- 这篇文章主要介绍了python导入不同目录下的自定义模块过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值
- 1.项目目录及文件说明:manage.pydjango中的一个命令行工具,管理django项目;__init__.py空文件,告诉pytho
- 学习目的 接触验证控件 昨天介绍了SQL SERVER插入数据,但是我们省略了验证输入这一步。以前的做法是用语句逐个判断输入的正确性,如是否
- 一、写在前面从学 Python 的第一天起,我就知道了使用 pip 命令来安装包,从学习爬虫到学习 Web 开发,安装的库越来越多,从 re
- Python是一种非常富有表现力的语言。它为我们提供了一个庞大的标准库和许多内置模块,帮助我们快速完成工作。然而,许多人可能会迷失在它提供的
- 今天在使用pytorch进行训练,在运行 loss.backward() 误差反向传播时出错 :RuntimeError: grad can
- 具体用法:1、<%= Counters.Get(CounterName) %>显示计数器的值。2、<% counterva
- 既然你选择了编程作为职业,就注定了要终生以计算机为伴。但这并不意味着你应该置自己的健康不顾。谁都知道,电脑面前待久了,一是伤害你的眼睛,而是
- 我就废话不多说了,大家还是直接看代码吧~# -*- coding: utf-8 -*-#keras==2.0.5#tensorflow==1
- 这是一个获取字符串中两个子串之间的子串,如从字符串www.aspxhome.com中获取coderbolg子串,就让这个PHP函数来实现吧,
- 链接字典chainMap是逻辑上合并两个字典为一个逻辑单元,合并后的结构实际上是一个列表,只是逻辑上是仍然为一个字典(并未生成新的),对此列
- 一、sqlserver优点:易用性、适合分布式组织的可伸缩性、用于决策支持的数据仓库功能、与许多其他服务器软件紧密关联的集成性、良好的性价比
- 需求分析业务要求,需要一个图片上传控件,需满足多图上传点击预览图片前端压缩支持初始化数据相关功能及资源分析基本功能先到https://www
- Navicat数据存放位置和备份数据库路径设置navicat的数据库存放位置在什么地方?带着这样的疑问,我们去解决问题,navicat是默认
- echarts是百度推出的一款开源的基于JavaScript的可视化图表库,该开发库目前发展非常不错,且支持各类图形的绘制可定制程度高,Ec
- 正在看的ORACLE教程是:Oracle不同数据库间对比分析脚本。Oracle数据库开发应用中经常对数据库管理员有这样的需求,对比两个不同实
- 因为需要一个html形式的数据统计界面,所以做了一个基于pyecharts包的可视化程序,当然matplotlib还是常用的数据可视化包,只
- 目录模块与包__import__模块缓存imp 与 importlib 模块惰性导入总结参考资料本文不讨论 Python 的导入机制(底层实