300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > 如何使用python-docx第三方库 操作读写doc Word文档 快速制作数据报表

如何使用python-docx第三方库 操作读写doc Word文档 快速制作数据报表

时间:2020-10-21 07:04:18

相关推荐

如何使用python-docx第三方库 操作读写doc Word文档 快速制作数据报表

1. 基本实现原理介绍

关于为什么要用 Python 来操作 Word ?理由如下:

在我们的工作中,如果仅仅是单纯用 Word 来完成工作的文档,那必然是无可厚非,但总是有一些场景,会让你苦恼。比如大批量的从网页复制一些信息,整理到 Word 中。

python-docx操作word文档 概念模式介绍

我们可以使用第三方库python-docx进行对word文档的相关操作,那么操作模式的抽象展示如下:对应与Word的文档、段落、文字块,分别抽象成Document类对象、Paragraph类对象、Run类对象。

在源码中对应Document类的展示:Document可以是创建,也可以是Open打开的模式,创建模式一般用于生成Word文档,open模式用于修改word文档的操作。

2. 安装第三方库python-docx

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./simple

阿里云镜像源:/pypi/simple/

中国科技大学镜像源: https://pypi.mirrors./simple/

华中理工大学镜像源:/

山东理工大学镜像源:/

豆瓣镜像源:/simple/

临时使用pip镜像源可以在使用pip的时候加参数:-i https://pypi.tuna./simple

3. 操作word标题和自然段

增加标题段

add_heading(self, text="", level=1)

如下是 add_heading 函数源码介绍,展示如下:

增加标题段,具体调用案例代码:

from docx import Documentfrom docx.document import Document as Document_Me# create Document() objectdocx: 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 Documentfrom docx.document import Document as Document_Me# create Document() objectdocx: 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()

4. 操作word自然段内容样式

然后我们操作Paragraph类的对象中方法进行段落内容的编写。

parag = docx.add_paragraph(text="第一个子自然段", style=None)parag.add_run("hello world")

生成在word文档中的效果展示如下所示:

生成的中文文字奇奇怪怪的,因为 docx 库对中文支持的不是很友好,所以,需要在程序里在设定下字体。初始化文档时,设置成全局即可。

把helloworld改变颜色操作:

from docx.shared import RGBColorparag.add_run("hello world").font.color.rgb = RGBColor(255, 0, 0)

其实这些段落中文字的操作都是Run类对象的操作:

相关段落中文字的字体大小、字体粗细、字体斜体的调整如下:

案例:利用Python调整Word文档样式:

from docx import Documentfrom docx.shared import Pt,RGBColor from docx.oxml.ns import qndoc = Document(r"G:\huanxingshouwan\_test2.docx")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(r"G:\huanxingshouwan\_test1.docx")

5. 操作word添加表格

我们也可以借助doc对象中的add_table,对我们的word进行添加表格,根据如下的源码展示,我们必须传入行数与列数两个参数,才能正确生成表格。

举例如下所示:table的rows属性对应是个二维的list列表,对应行与列。

from docx import Documentdoc = Document()list_cont = [["唤醒手腕", "男", "湖北省"],["唤醒手腕", "男", "北京市"],["唤醒手腕", "男", "广东省"],["唤醒手腕", "男", "湖南省"]]table = doc.add_table(rows=4, cols=3)for row in range(4):cells = table.rows[row].cellsfor col in range(3):cells[col].text = str(list_cont[row][col])doc.save("test.docx")

运行代码后会在同级目录生成对应的test.docx文档,使用WPS或者office进行打开后,查看文档的内容,展示如下所示:可见python生成表格也是很方便的。

6. 操作word修改段落样式

在平时操作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 Documentfrom docx.enum.text import WD_PARAGRAPH_ALIGNMENTdoc = Document()print(doc.paragraphs[0].text)doc.paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.CENTERdoc.save(r"对齐样式.docx")

修改段落样式:行间距

from docx import Documentdoc = Document()for paragraph in doc.paragraphs:paragraph.paragraph_format.line_spacing = 5.0doc.save("行间距.docx")

修改行间距其实,就是修改paragraph.paragraph_format.line_spacing的属性值,是double类型的值,比如5.0就是5倍的行间距。

相关的段落样式的访问,可以参考源码中ParagraphFormat类的相关方法:

7. 操作word添加图片

图片是我们需要经常进行添加操作的内容,那么在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 Documentfrom docx.document import Document as Document_Mefrom docx.shared import Cmfrom docx.enum.text import WD_PARAGRAPH_ALIGNMENT# create Document() objectdocx: Document_Me = Document()docx.add_paragraph("小汤的动漫展示").alignment = WD_PARAGRAPH_ALIGNMENT.CENTERdocx.add_picture("mini_tang.jpeg", height=Cm(5), width=Cm(5))docx.save("word.docx")

打开word文档效果展示如下所示:

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。