赞
踩
关于为什么要用 Python 来操作 Word ?理由如下:
在我们的工作中,如果仅仅是单纯用 Word 来完成工作的文档,那必然是无可厚非,但总是有一些场景,会让你苦恼。比如大批量的从网页复制一些信息,整理到 Word 中。
python-docx操作word文档 概念模式介绍
我们可以使用第三方库python-docx进行对word文档的相关操作,那么操作模式的抽象展示如下:对应与Word的文档、段落、文字块,分别抽象成Document类对象、Paragraph类对象、Run类对象。
在源码中对应Document类的展示:Document可以是创建,也可以是Open打开的模式,创建模式一般用于生成Word文档,open模式用于修改word文档的操作。
python-docx库介绍:
该模块儿可以创建、修改Word(.docx)文件;
此模块儿不属于python标准库,需要单独安装;
python-docx使用官网:python-docx官网;
我们在安装此模块儿使用的是 pip install python-docx
,但是在导入的时候是 import docx;
开始之前,先要安装第三方库 python-docx
pip install python-docx
pip的仓库一般都是在国外的服务器上,加了镜像源可以提供下载的速度。
常见pip镜像源(国内源)
清华镜像源:https://pypi.tuna.tsinghua.edu.cn/simple
阿里云镜像源:http://mirrors.aliyun.com/pypi/simple/
中国科技大学镜像源: https://pypi.mirrors.ustc.edu.cn/simple/
华中理工大学镜像源:http://pypi.hustunique.com/
山东理工大学镜像源:http://pypi.sdutlinux.org/
豆瓣镜像源:http://pypi.douban.com/simple/
临时使用pip镜像源可以在使用pip的时候加参数:-i https://pypi.tuna.tsinghua.edu.cn/simple
增加标题段
add_heading(self, text="", level=1)
如下是 add_heading 函数源码介绍,展示如下:
增加标题段,具体调用案例代码:
from docx import Document
from docx.document import Document as Document_Me
# create Document() object
docx: Document_Me = Document()
docx.add_heading("第一个自然段", level=0)
docx.save("word.docx")
在调用docx库时候,关于Pycharm代码不提示的原因解释:
有同学遇到代码不展示提示的功能,那么是因为docx对象,编辑器误以为是Document()的直接对象了,from docx.document import Document as Document_Me,去让docx对象是从属于docx.document.Document类的对象。
生成在word文档中的效果展示如下所示:
添加自然段
add_paragraph(self, text='', style=None)
,代码展示如下:
from docx import Document
from docx.document import Document as Document_Me
# create Document() object
docx: Document_Me = Document()
# docx.add_heading("第一个自然段", level=0)
docx.add_paragraph(text="内容自然段", style=None)
docx.save("word.docx")
添加自然段在源码中的函数定义,是有返回值的,返回值是(add_paragraph()函数的返回值)填充了文本和段落样式的段落,而add_paragraph()函数最后返回的是Paragraph类的对象。
add_paragraph(self, text='', style=None)
函数调用后会返回Paragraph类的对象
生成在word文档中的效果展示如下所示:
PS:添加空白页(分页符操作)docx.add_page_break()
然后我们操作Paragraph类的对象中方法进行段落内容的编写。
parag = docx.add_paragraph(text="第一个子自然段", style=None)
parag.add_run("hello world")
生成在word文档中的效果展示如下所示:
生成的中文文字奇奇怪怪的,因为 docx 库对中文支持的不是很友好,所以,需要在程序里在设定下字体。初始化文档时,设置成全局即可。
把helloworld改变颜色操作:
from docx.shared import RGBColor
parag.add_run("hello world").font.color.rgb = RGBColor(255, 0, 0)
其实这些段落中文字的操作都是Run类对象的操作:
相关段落中文字的字体大小、字体粗细、字体斜体的调整如下:
案例:利用Python调整Word文档样式:
from docx import Document from docx.shared import Pt,RGBColor from docx.oxml.ns import qn doc = Document(r"G:\huanxingshouwan\_test2.docx") for paragraph in doc.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(18) run.font.color.rgb = RGBColor(255,255,0) run.font.name = "宋体" # 设置像宋体这样的中文字体,必须添加下面2行代码 r = run._element.rPr.rFonts r.set(qn("w:eastAsia"),"宋体") doc.save(r"G:\huanxingshouwan\_test1.docx")
我们也可以借助doc对象中的add_table,对我们的word进行添加表格,根据如下的源码展示,我们必须传入行数与列数两个参数,才能正确生成表格。
举例如下所示:table的rows属性对应是个二维的list列表,对应行与列。
from docx import Document doc = Document() list_cont = [ ["唤醒手腕", "男", "湖北省"], ["唤醒手腕", "男", "北京市"], ["唤醒手腕", "男", "广东省"], ["唤醒手腕", "男", "湖南省"] ] table = doc.add_table(rows=4, cols=3) for row in range(4): cells = table.rows[row].cells for col in range(3): cells[col].text = str(list_cont[row][col]) doc.save("test.docx")
运行代码后会在同级目录生成对应的test.docx文档,使用WPS或者office进行打开后,查看文档的内容,展示如下所示:可见python生成表格也是很方便的。
在平时操作Word的过程中,为了文档的美观我们经常会对word段落样式进行处理,这边主要介绍下对齐样式、段落行间距等常见操作。
修改段落样式:对齐样式
在WD_PARAGRAPH_ALIGNMENT类中,__member__
存放了对应对齐方式的成员类,如上所示,常见的有:居中对齐、居左对齐、居右对齐、两端对齐(填充对齐)
WD_PARAGRAPH_ALIGNMENT.CENTER
# 居中对齐
WD_PARAGRAPH_ALIGNMENT.LEFT
# 居左对齐
WD_PARAGRAPH_ALIGNMENT.RIGHT
# 居右对齐
WD_PARAGRAPH_ALIGNMENT.JUSTIFY
# 两端对齐(填充对齐)
例如,如下设置段落的文字进行居中对齐的操作:
from docx import Document
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
doc = Document()
print(doc.paragraphs[0].text)
doc.paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
doc.save(r"对齐样式.docx")
修改段落样式:行间距
from docx import Document
doc = Document()
for paragraph in doc.paragraphs:
paragraph.paragraph_format.line_spacing = 5.0
doc.save("行间距.docx")
修改行间距其实,就是修改paragraph.paragraph_format.line_spacing的属性值,是double类型的值,比如5.0就是5倍的行间距。
相关的段落样式的访问,可以参考源码中ParagraphFormat类的相关方法:
图片是我们需要经常进行添加操作的内容,那么在python-docx也可以进行使用它来进行添加相应的图片,需要传入本地路径或者流对象即可。
这是源码中对doc对象的类函数add_picture的描述:
由源码可以看出,doc对象(Document类生成的对象)本身是不支持图片添加,正在在底层做到图片添加的是Paragraph类的对象,使用doc.add_picture实质上在调用Paragraph类对象的添加图片的方法。
特别注意:图片的尺寸需要Cm模块,用于设定图片尺寸大小,Cm模块指定的厘米,当然Mm就是指定毫米。
关于之前的RGB的数值单位,还有现在的图片尺寸单位,参考源码中Length类、Cm类、RGBColor类等等,例如源码中Length类展示如下:
例如添加图片的代码示例,指定宽度5cm,长度5cm:
from docx import Document
from docx.document import Document as Document_Me
from docx.shared import Cm
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
# create Document() object
docx: Document_Me = Document()
docx.add_paragraph("小汤的动漫展示").alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
docx.add_picture("mini_tang.jpeg", height=Cm(5), width=Cm(5))
docx.save("word.docx")
打开word文档效果展示如下所示:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。