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

在python中使用python-docx实现word文档自动化,第1张

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

python-docx的安装

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

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

 文档Document的结构

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

 下面我们就是根据这两张结构图进行分析和学习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也会介绍,哈哈哈哈哈哈哈~

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/793313.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-06
下一篇 2022-05-06

发表评论

登录后才能评论

评论列表(0条)

保存