在python中使用python-docx实现word文档自动化

五一马上就要结束了,趁着今天休息的一天,给大家说说在python对办公文档处理 文章中说要详细的介绍python中几个对文档处理的库,今天就介绍一下word文档处理的python-docx库,好了废话不多说开始吧,哈哈哈哈哈哈哈啊哈哈~

python-docx的安装

python-docx它既有读取文档也有写入文档。它的安装方法和官方文档:

安装方法:pip install python-docx
官方文档: python-docx 0.8.10

 文档Document的结构

通过官方文档的分析,我现在直接给大家两个结构图,如下:

在python中使用python-docx实现word文档自动化_第1张图片在python中使用python-docx实现word文档自动化_第2张图片

 下面我们就是根据这两张结构图进行分析和学习python-docx对word文档的处理的。

word文档的创建和段落操作

不管对文档什么样的操作,首先需要创建或者打开文档,代码如下:

from docx import Document
doc = Document()  # 新建文档对象
doc1 = Document("test.docx")  #打开test.docx文档

从第一张图,我们知道,有了文档之后,文档的内容进行操作,在这里我们先给一些常用的函数,如下表格:

方法 描述
add_heading(text, level=1) 标题段落,text标题内容, level决定段落样式
add_paragraph(textstyle=None) 添加段落,text段落内容,style为段落样式
add_page_break( ) 添加一个分页
add_picture(imagewidth=Noneheight=None) 添加图片,image图片文件,width和height图片的图片尺寸大小, 使用Cm或者Inches换算
add_section(start_type=2) 添加节,start_type为节符的类型
add_table(rowscolsstyle=None) 添加表格,rowscols为行列, style为表格样式
save(path_or_stream) 保存文档,path_or_stream保存文件名
add_run(text) 添加文字块儿, text内容
add_style(namestyle_typebuiltin=False) 添加样式

其实到这里我们就可以操作大部分的文档内容,那么怎么设置一些常用的属性呢?比如对齐方式,行间距,加粗等,下面列举一些常用的属性设置方式,如下:

属性 描述
alignment

对齐样式。

WD_ALIGN_PARAGRAPH. LEFT左对齐;WD_ALIGN_PARAGRAPH. CENTER:居中对其;

WD_ALIGN_PARAGRAPH. RIGHT右对齐;

WD_ALIGN_PARAGRAPH. JUSTIFY:两端对齐;

font.bold 字体是否加粗
font.italic 斜体
font.underline 下划线
font.font.strike 删除线
font.size 字体大小
font.color.rgb 字体颜色
font.name 使用什么字体
font.highlight_color 字体高亮
paragraph_format.line_spacing 行间距
paragraph_format.space_before 段前间距
paragraph_format.space_after 段后间距
paragraph_format.left_indent 调整左缩进,使用Pt衡量
paragraph_format.right_indent 调整右缩进,使用Pt衡量

到这里我们可以基本知道所有的文字段落相关的操作了,下面我们来点实际的东西吧,代码如下:

from docx import Document
from docx.shared import Pt #设置像素、缩进等
from docx.shared import RGBColor #设置字体颜色
from docx.oxml.ns import qn
from docx.enum.style import WD_STYLE_TYPE
doc = Document("test.docx")
style = doc.styles.add_style('tstyle', WD_STYLE_TYPE.PARAGRAPH)
style.font.color.rgb = RGBColor(0x42, 0x22, 0)
p = doc.add_paragraph("添加段落", style=style)
text = p.add_run("add_run")
for paragraph in doc.paragraphs:
  paragraph.paragraph_format.line_spacing = 3.0
  paragraph.alignment = WD_ALIGN_PARAGRAPH.CENTER
  paragraph.paragraph_format.space_before = Pt(10)
  paragraph.paragraph_format.space_after = Pt(10)
  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(20)
    run.font.color.rgb = RGBColor(0x42, 0x24, 0xE9)
    run.font.name = "仿宋"
    r = run._element.rPr.rFonts
    r.set(qn("w:eastAsia"),"微软雅黑")
doc.save("test.docx")

word文档的添加表格

从上面的表格我们知道添加表格我们使用的是add_table方法,但添加表格还有两个函数就是add_row()和add_column()。add_row()函数默认添加在表格的底部,而add_column()函数默认添加到列最右侧。从添加函数add_row()和add_column()我们可以知道表格是有两个属性,那就是行列了,哈哈哈哈~那么我们怎么访问呢?但是是通过表格的table.rows和table.columns两个属性获取行和列的的总对象,然后使用索引获取指定的行或者列对象。但是表格单元格是按行存储的,所以操作的时候要注意的,特别是删除列的时候不能像“行”使用row._element.getparent().remove()函数来删除,但可以使用单元格进行删除。代码如下:

from docx import Document
from docx.shared import Inches
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.shared import Cm, Pt
from docx.oxml.ns import qn
from docx.shared import RGBColor
doc=Document(  )
tobj = doc.add_table(3, 2)
tobj .add_column()
tobj .add_row()
cell_obj = tobj .cell(1,1)
cell_obj.add_paragraph(text='22', style=None)
tobj.cell(1, 1).text = ''
paragraph = tobj .cell(0, 1).text='33'
paragraph = tobj .cell(0, 1).text=''
c2 =cell_obj.merge(table_obj.cell(2,2))
c2.add_paragraph(text='22', style=None)
tables = doc.tables # 获取文档中所有表格对象的列表
table0 = tables[0]  # 获取表格对象
cells = table0._cells
cells_string = [cell.text for cell in cells]
col_num = len(table0.columns)
row_num = len(table0.rows)
row0 = table0.rows[0]
col0 = table0.columns[0]

总结

这篇文章重点主要是介绍一些python-docx使用比较多的一些方法和属性,包括介绍python-docx对文档操作的结构,如果想更深入的研究python-docx的使用或者python-docx怎么实现的,我推荐观看python-docx官方文档(英语要比较好)。也许还会有人问,那word统计分析的图形怎么没有,其实我们可以通过将表格转到Excel中,然后使用openpyxl来完成;或者通过pandas分析统计数据,然后使用matplotlib批量生成图表;pandas和matplotlib也会介绍,哈哈哈哈哈哈哈~

你可能感兴趣的:(python,python,list,人工智能,后端,机器学习)