当前位置:   article > 正文

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

python-doc

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库介绍:

  1. 该模块儿可以创建、修改Word(.docx)文件;

  2. 此模块儿不属于python标准库,需要单独安装;

  3. python-docx使用官网:python-docx官网;

  4. 我们在安装此模块儿使用的是 pip install python-docx,但是在导入的时候是 import docx;

开始之前,先要安装第三方库 python-docx

pip install python-docx
  • 1

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

3. 操作word标题和自然段

增加标题段

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")
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

在调用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")
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

添加自然段在源码中的函数定义,是有返回值的,返回值是(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")
  • 1
  • 2

生成在word文档中的效果展示如下所示:
在这里插入图片描述
生成的中文文字奇奇怪怪的,因为 docx 库对中文支持的不是很友好,所以,需要在程序里在设定下字体。初始化文档时,设置成全局即可。

把helloworld改变颜色操作:

from docx.shared import RGBColor
parag.add_run("hello world").font.color.rgb = RGBColor(255, 0, 0)
  • 1
  • 2

其实这些段落中文字的操作都是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")
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

5. 操作word添加表格

我们也可以借助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")
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

运行代码后会在同级目录生成对应的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 
# 两端对齐(填充对齐)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

例如,如下设置段落的文字进行居中对齐的操作:

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")
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

修改段落样式:行间距

from docx import Document

doc = Document()
for paragraph in doc.paragraphs:
    paragraph.paragraph_format.line_spacing = 5.0
doc.save("行间距.docx")
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

修改行间距其实,就是修改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 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")
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

打开word文档效果展示如下所示:
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/660988
推荐阅读
相关标签
  

闽ICP备14008679号